如何正确传递python args和docker env?

时间:2020-09-25 18:19:22

标签: python docker

我有带args的python文件,该文件路径为file1,file2。例如, python my_py.py /files file1.txt file2.txtmy_py.py内,

import os
f1 = open('file1.txt', 'r')
f1_read = f1.read()
print(f1_read)

f2 = open('file2.txt, 'r')
f2_read = f2.read()
print(f2_read)

db = os.environ('DB')
user_id = os.environ('UID')
password = os.environ('PWD')
print('db: {}, user: {}, password: {}'.format(db, user_id, password))

在我的Dockerfile内

FROM centos7

RUN yum install -y update
ENTRYPOINT ["/bin/bash"]

构建并尝试运行它之后,

docker run -d -t my_image -e DB=my_db -e UID=myUser -e PWD=myPwd

即使我使用-d,它也会在运行后立即退出。我想做的是,运行容器并使用python my_py.py /files file1.txt file2.txt运行python(exec)。

如果我在dockerfile中有不同的cmd,

CMD ['python' 'my_py.py', 'file1.txt' 'file2.txt']

,然后运行与上述相同的docker run。 我收到此错误

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-e\": executable file not found in $PATH": unknown.

对其进行研究,似乎它是错误的docker语法,但至少可以更早地工作。

反正我可以同时在docker env中使用python args吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您所拥有的东西有几处小问题

第一个是CMD的语法-应该是json(推荐)或shell行-这是对此的更正:

(请注意,您在这里有两个bug,一个缺少逗号,而两个则需要用双引号引起来)

CMD ["python", "my_py.py", "file1.txt", "file2.txt"]

现在下一部分是docker命令中标志的位置是敏感的(因此它知道哪些标志进入docker,哪些标志进入可执行文件)。这基于第一个非标记参数(图像)-之后的所有内容均为可执行文件的标记,而之前的所有内容均为docker的标记

调整命令:

docker run -d -t -e DB=my_db -e UID=myUser -e PWD=myPwd my_image

还请注意,您可能不想在命令行中输入密码,因为任何用户都可以通过ps读取密码(安全性问题),最好使用--env-file