Docker USER在运行命令之前是否会输出.bashrc吗?

时间:2016-06-16 18:23:02

标签: docker flask dockerfile

我有一个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变量。

1 个答案:

答案 0 :(得分:1)

尝试使用bash作为命令运行它:

CMD ["bash", "-c", "flask run --host 0.0.0.0"]