python - 如何正确传递 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 吗?
提前致谢。
解决方案
你所拥有的东西有一些小问题
第一个是语法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
推荐阅读
- html - 在 Crome 上显示黑屏的 html 视频
- azure-ad-b2c - B2C 密码重置策略强制登录进入忘记密码流程
- git - 如何从 .gitignore 中删除某些文件目录关于 Git
- python - 如何用科学记数法(张量格式)解析文本文件并将它们转换为浮点数
- spring-boot - 为什么 Spring Converter 没有抛出异常?
- grails - CSV 插件控制器在哪里?
- azure-synapse - Synapse Spark Pool 在配置状态下挂起:删除错误
- raspberry-pi - Raspberry Pi dhcp-exit-hooks 适用于 wlan0 但不适用于 eth0
- python-3.x - 使用 BeautifulSoup - Python 从 www.transfermarkt.co.uk 抓取数据
- spring - 返回具体的 RestTemplate bean,如何?