Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dockerfile-Can';不要使用除'以外的其他名称;app.py';_Python_Python 2.7_Docker_Dockerfile - Fatal编程技术网

Python Dockerfile-Can';不要使用除'以外的其他名称;app.py';

Python Dockerfile-Can';不要使用除'以外的其他名称;app.py';,python,python-2.7,docker,dockerfile,Python,Python 2.7,Docker,Dockerfile,过去几天我一直在搜索Dockerfile。我正在Python2.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_distanc

过去几天我一直在搜索Dockerfile。我正在Python2.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”图像。但当我运行“gen”映像时,只有app.py在工作:

>docker run -p 5500:5000 gen
>Generate distance
我看不出我犯了什么错误。我也不知道为什么要叫app.py。如果在Dockerfile中复制时使用不同的文件名,则会出现“无此类文件或目录”错误。即:

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
希望有人能帮助我:)

您的图像是基于(Dockerfile的第一行)

在此Dockerfile中定义了一个“CMD”,用于指定容器的第一个命令。这就是

CMD python app.py
(见附件)

该命令将作为
sh-c“python app.py”
执行

这就是为什么Dockerfile从容器创建开始
python app.py

您需要覆盖Dockerfile中的“CMD”部分,例如

CMD ["python", "app2.py"]
请参阅以了解CMD

Dockerfile中应该只有一个CMD,其中包含由容器自动执行的第一个命令


<>如果你想启动多个服务,你应该考虑,如果这真的被打包成一个图像。或者你遵循并考虑使用一个主管或一个脚本来启动你想要的服务。

< P>如果有人想知道我是如何解决这个问题的,我用BASH脚本代替。p> 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。

Cool,感谢您的快速回答。你知道我怎样才能同时运行这两个吗?:)我在一个项目中用一个似乎是最干净的解决方案之一的实现了这一点。或者,由于您现在知道如何将第一个CMD命令转换为shell语法,您可以使用它启动多个进程。取决于您希望它如何运行您是否可以提供一些代码提示?很好,非常感谢您抽出时间。非常感谢你的回答