我有一个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)
但是,程序无法找到HELLO
环境变量。当我通过执行
env_dict = {
'HELLO': 'WORLD'
}
procedure = subprocess.Popen("/my/cool/program", shell=False, env=env_dict)
它没有问题。这让我相信问题是当docker运行CMD
用户选择了USER
时,它不会首先正确地获取该用户的环境。
这是真的吗?如果是这样,有什么好办法吗?我想避免在.bashrc
和Flask应用程序中双重声明我的所有env变量。
答案 0 :(得分:1)
尝试使用bash作为命令运行它:
CMD ["bash", "-c", "flask run --host 0.0.0.0"]