【问题标题】:Customize docker container bash自定义 docker 容器 bash
【发布时间】:2017-07-10 00:00:43
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您能否为bash 命令指定-l 标志?这将导致子 shell bash 以与登录 shell 相同的方式进行初始化,这将导致它调用配置文件。
  • 我在 docker-entrypoint.sh 中尝试过:/bin/bash -l -c "source /root/.profile"。但没有做更多的事情!我做错了吗?
  • docker run -v ~/.profiledocker run -v ~/.bash_profile 有问题,因为我猜你可以做同样的 docker-compose?
  • 如果您使用-l 选项(或-lc 的组合),那么shell 应该将配置文件作为启动的正常部分运行。详情请查看man bash
  • @Kern 你能展示你的 Dockerfile 吗?我已经尝试过类似COPY mybashrc /root/.bashrc 的东西(带有 bash 和 ubuntu 图像),它在运行 bash 时被选中...

标签: bash unix docker


【解决方案1】:

我不确定使用 ~/.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

【讨论】:

  • 谢谢 Seb,就是这样 :D !我将这些行附加到 .bashrc 文件中,它在第一次运行时确实有效!
【解决方案2】:

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

CMD ["bash", "-l"]

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2020-10-02
    • 2017-02-22
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多