自定义 docker 容器 bash

Ker*_*ern 6 unix bash docker

我尝试为 Docker 容器 bash 提示设置自定义配置,以在连接时显示 git 分支名称。

我发现一切正常,但我无法在容器的构建中执行~/.profile甚至~/.bash_profile文件。

如果我source ~/.profile在容器内手动执行,它工作正常。但我不希望我的用户键入任何命令来启用自定义提示。

我试图将Dockerfile放入RUN /bin/bash -c "source /root/.profile"RUN source /root/.profile放入source /root/.profile我的entrypoint.sh文件中,但没有成功。

我在运行时看到了一些解决方案docker run,但我正在使用 docker-compose。

谢谢大家,如果您有任何建议:D!

Séb*_*all 4

我不确定使用 ~/.profile 配置文件是执行您想要的操作的最佳方法。另外,使用RUN source /root/.profile不会有任何效果,因为该行只会执行一次,并且在尝试在容器内执行 bash 二进制文件时不会持久。(它实际上会运行一个新的 bash 会话)。

所以..首先,您尝试执行的配置类型应该位于 .bashrc 文件中(只是因为它是它通常出现的地方)。

然后,正如 bash 手册页所说:

当 bash 作为交互式登录 shell 或带有 --login 选项的非交互式 shell 被调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile

和 :

当启动非登录 shell 的交互式 shell 时,bash 将从 /etc/bash.bashrc 和 ~/.bashrc 读取并执行命令(如果这些文件存在)。

你可能应该做什么:

在 Dockerfile 中:

COPY config/.bashrc /root/.bashrc
Run Code Online (Sandbox Code Playgroud)

您想要复制到容器中的 .bashrc 文件位于配置存储库中。这是您应该放置配置的位置。

然后,在入口点:

exec "$@"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 docker 命令运行 bash:

docker run XXX /bin/bash
Run Code Online (Sandbox Code Playgroud)