首页 > 解决方案 > 如何正确传递 python args 和 docker env?

问题描述

我有 python 文件,它接受 args 哪个文件路径,file1,file2。例如, python my_py.py /files file1.txt file2.txt 在 的内部my_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使用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 语法,但它至少可以更早地工作。

无论如何,我可以同时使用 python args 和 docker env 吗?

提前致谢。

标签: pythondocker

解决方案


你所拥有的东西有一些小问题

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

(注意这里有两个错误,一个缺少逗号,两个需要双引号)

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


推荐阅读