在Docker容器中永久更新PATH环境变量

use*_*375 58 environment-variables docker linux-containers

我尝试添加到PATH文件中~/.profile,/etc/profile如下所示.

PATH = $PATH:/required/path
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用.然后我尝试添加行显示,这也不起作用.

export PATH
Run Code Online (Sandbox Code Playgroud)

即使在重新启动容器和主机之后它也无法工作.

Jia*_*Gao 106

如果要/new/pathDockerfile中包含a ,请添加以下行:

ENV PATH "$PATH:/new/path"

Dockerfile中应该工作.

  • 请注意,引号很重要. (5认同)

BiB*_*iBi 20

1. 正确答案

最佳投票答案建议添加ENV PATH "$PATH:/new/path"Dockerfile,这确实应该有效。

2. 那么为什么它对我不起作用?

正如一些评论/答案中所指出的,解决方案 1. 对某些人不起作用。

原因是PATH可以被一些脚本覆盖,比如.bashrc在运行 docker 容器时,给人的印象是ENV PATH...没有工作,但理论上确实如此。

要解决此问题,您需要通过将以下命令添加到 Dockerfile来附加到.bashrc正确PATH的内容:

RUN echo "export PATH=/new/path:${PATH}" >> /root/.bashrc


use*_*097 12

在Dockerfile中添加一行,ENV PATH xxx请参阅此Dockerfile中的示例https://gist.github.com/deepak/5933685


use*_*375 9

我在irc聊天中得到了这个问题的答案.在这里给予任何可能遇到这种情况的人的利益.很多人在更新时给出了错误的答案,~/.profile但是没有用.所以请使用下面的答案.

~/.bashrc为用户更新文件或更新/etc/enviroment全局变更文件,该文件将适用于所有用户.

.bashrc出口路径:export PATH=$PATH:/new/path/bin

在环境中: PATH=$PATH:/new/path/bin

  • 根据这个 Ubuntu 文档,'in environment' 的方法是不正确的(注意:变量扩展在 /etc/environment. 中不起作用)。https://help.ubuntu.com/community/EnvironmentVariables#A.2Fetc.2Fenvironment (2认同)

Tim*_*Tim 7

没有指出交互式 shell 和非交互式 shell 之间的区别。因此,这就是为什么上述解决方案有时似乎有效,有时却无效。

bashrc对于非交互式 shell,文件通常会被跳过。例如在 Debian 中,该/etc/bash.bashrc文件非常清楚地指出:

# System-wide .bashrc file for interactive bash(1) shells.

# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)
  • Dockerfile 中的命令RUN调用非交互式shell。ENV并且将采用设置的路径并且bashrc脚本将不会运行。
  • docker run -it <image> /bin/bash调用交互式shell。bashrc将运行并且可以覆盖 中设置的任何内容ENV,如果例如PATH没有在PATH=$PATH:/...任何脚本中的常用语法中定义bashrc

为了确保两种操作模式之间的安全性和一致性,可以在 Dockerfile 中执行以下操作:

ENV PATH /master/go/bin:${PATH}
RUN echo "${PATH}" >> /etc/bash.bashrc
Run Code Online (Sandbox Code Playgroud)

请注意,这/etc/bash.bashrc是 Debian 位置,可能与其他发行版映像不同。