我尝试为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!
答案 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
的来源。