Dockerfile – 不能使用除“app.py”以外的其他名称
过去几天我一直在寻找Dockerfile。 我在Python 2.7中使用cx_Oracle。 以下是我的Dockerfile的外观:
FROM sbanal/python-oracle-xe12.1-latest WORKDIR /code/app COPY generate_distance.py /code/app/app.py COPY generate_values.py /code/app/app2.py
为了便于解释,我已经制作了一个打印文件名的方法。 在generate_distance.py中:
def test(): print "Generate distance" test()
在generate_values.py中:
def test(): print "Generate values" test()
然后,我正在运行docker构build一个标记:
docker build -t gen . Sending build context to Docker daemon 13.82kB Step 1/4 : FROM sbanal/python-oracle-xe12.1-latest ---> 723335924016 Step 2/4 : WORKDIR /code/app ---> Using cache ---> 9fde6fb3ac02 Step 3/4 : COPY generate_distance.py /code/app/app.py ---> 1dbf7ef85ee3 Removing intermediate container ae626dcef48c Step 4/4 : COPY generate_values.py /code/app/app2.py ---> 7a54500b88a3 Removing intermediate container f496edfc237d Successfully built 7a54500b88a3 Successfully tagged gen:latest
运行“docker图像”时,可以看到“生成”图像。 但是当我运行'gen'图像时,只有app.py正在工作:
>docker run -p 5500:5000 gen >Generate distance
我看不出我犯了什么错误。 我也不知道为什么它被称为app.py。 如果我在Dockerfile的COPY过程中使用不同的文件名,我得到'没有这样的文件或目录'的错误。 那是:
FROM sbanal/python-oracle-xe12.1-latest WORKDIR /code/app COPY generate_relation_distance.py /code/app/generate_relation_distance.py COPY generate_ten_values.py /code/app/generate_ten_values.py
像部分一样构build和运行:
docker run -p 5500:5000 gen python: can't open file 'app.py': [Errno 2] No such file or directory
希望可以有人帮帮我 :)
你的映像基于sbanal / python-oracle-xe12.1-latest ( Dockerfile的第一行)。
在这个Dockerfile中定义了一个“CMD”,它指定了你的容器的第一个命令。 在这里,就是这样
CMD python app.py
(请参阅基本映像的最后一行 )。
该命令将作为sh -c "python app.py"
。
这就是为什么你的Dockerfile从容器创buildpython app.py
您需要覆盖Dockerfile中的“CMD”部分,例如
CMD ["python", "app2.py"]
查看官方docker文件了解CMD。
您的Dockerfile中只应包含一个CMD,其中包含由容器自动执行的第一个命令。
如果你想启动多个服务,你应该考虑,如果这应该真的被打包成一个图像。 或者你按照官方的文档,并考虑使用主pipe或脚本,开始你想要的服务。
如果有人想知道我是如何解决问题的,我用bash脚本代替。
script.sh:
#Build the image docker build -t image_name . #Run image image_name in container docker run -d -p 550:500 image_name tail -f /dev/null #Get the container id container_id="$(docker ps | grep $IMAGE_NAME | grep -Eo '^[^ ]+')" #Run your program in container docker exec -it container_id /bin/sh -c "python generate_distance.py" docker exec -it container_id /bin/sh -c "python generate_values.py"
我的目标是将输出存储在文本文件中,并将其从docker容器复制到localhost。