我尝试按照以下方法在文件~/.profile
和/etc/profile
中添加到PATH
。
PATH = $PATH:/required/path
然而,它并没有起作用。然后我尝试添加显示(show)行,但也没有起作用。
export PATH
即使重新启动容器和主机,它仍然无法正常工作。
我尝试按照以下方法在文件~/.profile
和/etc/profile
中添加到PATH
。
PATH = $PATH:/required/path
然而,它并没有起作用。然后我尝试添加显示(show)行,但也没有起作用。
export PATH
即使重新启动容器和主机,它仍然无法正常工作。
/new/path
,则添加以下行:ENV PATH "$PATH:/new/path"
在Dockerfile中即可生效。最佳投票答案建议在Dockerfile中添加ENV PATH "$PATH:/new/path"
,这应该有效。
正如某些评论/答案所指出的那样,解决方案1对一些人不起作用。
原因是当运行docker容器时,PATH
可能被一些脚本(如.bashrc
)覆盖,从而给人留下了ENV PATH...
没有工作的印象,但理论上它确实工作了。
要解决此问题,您需要通过将以下命令添加到Dockerfile来附加正确的PATH
到.bashrc
:
RUN echo "export PATH=/new/path:${PATH}" >> /root/.bashrc
. /root/.bashrc
命令在现有的bash会话中引用更新后的文件。否则,当打开一个新的会话时,默认情况下应该会捕获到这个更改。 - erranENV PATH xxx
,可以参考这个 Dockerfile 示例 https://gist.github.com/deepak/5933685。我在IRC聊天中获得了这个问题的答案,并将其提供给可能遇到此问题的任何人。很多人都给出了错误的答案,比如要更新~/.profile
文件,但那并不起作用。所以请使用以下答案。
对于用户,请更新文件~/.bashrc
,对于全局更改,请更新/etc/environment
文件。这将应用于所有用户。
在.bashrc
文件中,导出路径:export PATH=$PATH:/new/path/bin
在环境变量文件中:PATH=$PATH:/new/path/bin
# 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
命令调用了一个非交互式shell,并且所设置的ENV
路径以及bashrc
脚本将不会被运行。docker run -it <image> /bin/bash
调用了一个交互式shell。 bashrc
将被运行,如果在任何一个bashrc
脚本中没有按照通常的 PATH=$PATH:/...
语法来定义PATH
,那么它可以覆盖任何由ENV
设置的内容。为了在这两种模式之间保持安全和一致,可以在Dockerfile中进行如下设置:
ENV PATH /master/go/bin:${PATH}
RUN echo "${PATH}" >> /etc/bash.bashrc
/etc/bash.bashrc
是Debian的位置,在其他发行镜像上可能不同。FROM centos:7
RUN yum update -y yum install -y tar
COPY jdk-7u80-linux-x64.tar.gz /opt/
WORKDIR /opt
RUN tar -xvf jdk-7u80-linux-x64.tar.gz
RUN chmod -R 755 jdk1.7.0_80
RUN echo export JAVA_HOME=/opt/jdk1.7.0_80 >> /etc/profile
RUN echo export PATH='$PATH:$JAVA_HOME/bin' >> /etc/profile
ENV JAVA_HOME "/opt/jdk1.7.0_80"
ENV PATH "${JAVA_HOME}/bin:${PATH}"