自定义docker容器bash

时间:2017-02-20 16:00:19

标签: bash unix docker

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

我发现所有内容都能正常运行,但我无法在容器大楼中执行~/.profile甚至~/.bash_profile个文件。

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

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

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

如果您有任何建议,请大家好评:D!

2 个答案:

答案 0 :(得分:3)

我不确定使用〜/ .profile配置文件是做你想做的最好的方法。此外,使用RUN source /root/.profile将不会产生任何影响,因为该行仅执行一次,并且在尝试执行de容器内的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

要复制到容器中的.bashrc文件位于配置仓库中。这是你应该为你配置的地方。

然后,在入口点:

exec "$@"

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

docker run XXX /bin/bash

答案 1 :(得分:0)

这是我在运行docker容器时使~/.bash_profile工作的工作。您可以使用CMD指令将bash作为登录shell启动:

CMD ["bash", "-l"]

每次启动容器时都会运行CMD命令。 -l选项将告诉bash作为登录shell启动,以便确保~/.bash_profile的来源。

您可能还对difference between login and non-login shell感兴趣。