在运行命令之前,Docker USER是否源代码.bashrc?
我有一个Docker文件,我沿着以下线路运行:
FROM centos:6.7 ... ... RUN useradd -ms /bin/bash my_user \ && echo "my_user:docker" | chpasswd \ && echo "my_user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \ && chown my_user:my_user /home/my_user \ && chmod 755 /home/my_user \ && mkdir -p /home/my_user/.ssh ... RUN echo "export HELLO=WORLD" >> /home/my_user/.bashrc ... USER my_user ENV FLASK_APP=/path/to/my/app.py CMD ["flask", "run", "--host", "0.0.0.0"]
Flask服务器在获得正确的Web请求后,只需执行以下操作:
procedure = subprocess.Popen("/my/cool/program", shell=False)
但是,程序无法findHELLO
环境variables。 当我强迫环境进入命令的时候
env_dict = { 'HELLO': 'WORLD' } procedure = subprocess.Popen("/my/cool/program", shell=False, env=env_dict)
它工作没有问题。 这使我相信这个问题是,当docker运行CMD
作为USER
select的USER
,它不会首先正确地获取用户的环境。
真的吗? 如果是的话,有没有什么好方法呢? 我想避免在.bashrc
和Flask应用程序中声明所有的envvariables。
尝试使用bash作为命令运行它:
CMD ["bash", "-c", "flask run --host 0.0.0.0"]