【发布时间】:2019-01-31 18:29:14
【问题描述】:
我正在创建一个 docker 映像,我想在其中挂载我的主目录。但是,我想在实例化时运行其他一些 bashrc 文件。
问题是我无法将此bashrc 文件复制到我的用户的工作目录中,因为我将挂载我的(主机)主目录。我曾尝试因此附加到 /etc/bashrc 或放入 /etc/profile.d 但它永远不会运行。
我的 dockerfile 看起来像这样:
FROM centos:7
RUN adduser -s /bin/bash user -G users
RUN echo "echo /etc/bashrc" >> /etc/bashrc
RUN echo "echo /etc/profile" >> /etc/profile
RUN echo "echo /etc/profile.d/mine.sh" >> /etc/profile.d/mine.sh
USER user
WORKDIR /home/user
ENTRYPOINT [ "/bin/bash" ]
我现在在挂载我的主目录时构建并运行这个容器:
docker build -t devenv .
docker run --rm --volume $HOME:/home/user -it devenv
当我打开控制台时,只有(挂载的).bashrc 运行。但是,如果我运行bash -l(登录shell);然后配置文件运行(但不是 .bashrc)。
bash-4.2$ bash
inside mounted host .bashrc
bash-4.2$ bash -l
/etc/profile.d/mine.sh
/etc/profile
/etc/profile.d/mine.sh
/etc/profile
所以我不知道将在进入控制台时运行的逻辑放在哪里(并且 .bashrc 也应该运行)?为什么 /etc/bashrc 永远不会运行?
EDIT:在centos7虚拟机中运行bash甚至bash -l时; /etc/bashrc 确实会运行...
【问题讨论】:
-
对。登录 shell(由
-l选项创建)源.profile,非登录 shell 使用.bashrc。/etc/bashrc并不是真正的标准配置文件,需要 (IIRC) 显式启用编译时选项以将其用于非登录交互式 shell。 -
@chepner 你知道我可以使用的任何其他配置文件(不在主目录中)吗?
-
我建议在
.bashrc的顶部明确采购/etc/bashrc。听起来您的 VM 有一些自定义的bash安装,可以使用/etc/bashrc,但 Docker 映像没有。 -
@chepner 感谢您的提示,这些帮助我找到了解决方法;看我自己的答案..