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。