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/path在Dockerfile中包含a ,请添加以下行:
ENV PATH "$PATH:/new/path"
在Dockerfile中应该工作.
BiB*_*iBi 20
最佳投票答案建议添加ENV PATH "$PATH:/new/path"到Dockerfile,这确实应该有效。
正如一些评论/答案中所指出的,解决方案 1. 对某些人不起作用。
原因是PATH可以被一些脚本覆盖,比如.bashrc在运行 docker 容器时,给人的印象是ENV PATH...没有工作,但理论上确实如此。
要解决此问题,您需要通过将以下命令添加到 Dockerfile来附加到.bashrc正确PATH的内容:
RUN echo "export PATH=/new/path:${PATH}" >> /root/.bashrc
我在irc聊天中得到了这个问题的答案.在这里给予任何可能遇到这种情况的人的利益.很多人在更新时给出了错误的答案,~/.profile但是没有用.所以请使用下面的答案.
~/.bashrc为用户更新文件或更新/etc/enviroment全局变更文件,该文件将适用于所有用户.
在.bashrc出口路径:export PATH=$PATH:/new/path/bin
在环境中: PATH=$PATH:/new/path/bin
没有指出交互式 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)
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 位置,可能与其他发行版映像不同。
| 归档时间: |
|
| 查看次数: |
52939 次 |
| 最近记录: |