过去几天我一直在搜索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 images'时,我可以看到'gen'图像。但是当我运行'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
像部件一样构建和运行:
docker run -p 5500:5000 gen
python: can't open file 'app.py': [Errno 2] No such file or directory
希望有人可以帮助我:)。
答案 0 :(得分:3)
您的图片基于sbanal/python-oracle-xe12.1-latest(Dockerfile的第一行)。
在这个Dockerfile中是一个" CMD" defined,指定容器的第一个命令。这是
CMD python app.py
(见last line of your base image)。
该命令将以sh -c "python app.py"
执行。
这就是您的Dockerfile在容器创建python app.py
您需要覆盖" CMD"部分在你的Dockerfile中,例如
CMD ["python", "app2.py"]
请参阅official docker docs了解CMD。
您的Dockerfile中只有一个CMD包含第一个命令,该命令由容器自动执行。
如果您想要启动多项服务,您应该考虑,如果这应该真正打包到一个图像中。或者您遵循official docs并考虑使用主管或脚本来启动您所需的服务。
答案 1 :(得分:0)
如果有人想知道我是如何解决问题的,那么我使用的是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。