我有带args的python文件,该文件路径为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
运行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吗?
谢谢。
答案 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
>