当前位置: 首页 > 知识库问答 >
问题:

为什么我的(centos)docker容器不运行/etc/bashrc?

邢硕
2023-03-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

当我打开控制台时,只有(mounted).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从来不跑?

编辑:在centos7虚拟机中运行bash甚至bash-l时/etc/bashrc确实可以运行。。。

共有1个答案

宋铭
2023-03-14

第一;感谢@chepner向我解释为什么/etc/bashrc没有运行。所以我想出了一个很好的解决办法:

  • 在启动时强制bash加载/etc/bashrc
  • 内部/etc/bashrc;添加我的特定配置,然后运行~/.bashrc

Dockerfile:

FROM centos:7

RUN adduser -s /bin/bash user -G users
# remove /home/user/.bashrc to avoid infinite loop with /etc/bashrc
# when /home/user is not mounted
RUN rm /home/user/.bashrc
RUN echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> /etc/bashrc
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", "--rcfile", "/etc/bashrc" ]

同样,构建和运行为我提供了以下输出:

/etc/profile.d/mine.sh
/etc/bashrc
inside mounted host .bashrc
inside bashrc

CAVEAT:确保删除Docker映像中的原始. bashrc。~/. bashrc的centos: 7中的默认内容是:

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

如果没有挂载主目录,现在将创建一个无限循环

 类似资料:
  • 但是只有使用运行它才允许用户通过终端与容器化进程交互。所以我想知道,“分配一个伪tty”是什么意思,因为即使在没有的情况下运行,进程写入的内容也会传递到终端(进程将有一个管道作为stdout,而不是tty)? 我读到这个答案说,您可以运行来获得“终端支持”,例如文本着色等。我已经做了以下实验: 并运行此映像,不使用。因为我是从终端运行它(总是从某个终端运行,不是吗?)我能看到一个红色的“你好世界”

  • 我已经创建了一个docker映像,允许用户使用SSH在上面连接。 出于安全原因,我希望用户可以更改他们的密码。我只使用docker命名的卷,所以我不能绑定 /etc/passwd,我不想挂载所有 /etc 有什么想法吗?提前感谢。

  • 我找到了很多关于如何在中运行的博客,但没有一个真正解释这样做的好处。 1)我希望服务器的大部分配置都在版本控制之下。 2)当我尝试新功能或配置时,我希望能够在我的计算机上本地运行构建服务器 3)我希望能够轻松地在一个新的环境中建立一个构建服务器(例如。在本地服务器上,或在云环境(如AWS)中)

  • 问题内容: 我无法在Docker容器中运行任何yum命令,而没有出现以下错误: 我很困惑,因为我非常确定docker容器是使用默认用户root运行的。不过,如果我尝试将sudo放在a 或command 前面,则会得到: 我正在使用以下基本映像,以便可以在Docker中轻松运行Java Wildfly应用程序:https ://hub.docker.com/r/jboss/wildfly/ 底层发行

  • Docker教程经常说我可以运行更多容器,以提高我的webapp的可用性。然而,这是一个非常宽泛的声明,并没有解释在不同的情况下应该运行多少个容器。我如何知道我是否需要1、5、10、100或1000个容器实例? 示例-我只有一台服务器,正在使用docker运行nginx和php fpm。每个容器一个。有了这个简单的设置,我的webapp就可以正常工作,而且看起来很灵敏。(在同一台服务器上)增加额外

  • 我有以下Dockerfile: 以及以下docker-compose.yml: 如果我通过docker cmd以以下方式手动运行Dockerfile: 看起来一切正常,我得到了它实际执行的应用程序输出日志: 但是,当我试图通过docker-comment以以下方式执行我的应用程序时: 我的应用程序似乎启动正常,但无法继续执行。以下是输出: 我尝试执行show logs命令: 但我得到的唯一记录是第