我尝试添加到PATH
文件中~/.profile
,/etc/profile
如下所示。
PATH = $PATH:/required/path
但是,它不起作用。然后我尝试添加行显示,这也不起作用。
export PATH
即使在重新启动容器和主机后它也不起作用。
我尝试添加到PATH
文件中~/.profile
,/etc/profile
如下所示。
PATH = $PATH:/required/path
但是,它不起作用。然后我尝试添加行显示,这也不起作用。
export PATH
即使在重新启动容器和主机后它也不起作用。
如果要/new/path
在Dockerfile中包含 a ,请添加以下行:
ENV PATH "$PATH:/new/path"
在Dockerfile中应该可以工作。
最佳投票答案建议添加ENV PATH "$PATH:/new/path"
到Dockerfile,这确实应该有效。
正如一些评论/答案中所述,解决方案 1. 对某些人不起作用。
原因是PATH
可以被一些脚本覆盖,比如.bashrc
在运行 docker 容器时,给人的印象是ENV PATH...
它不起作用,但理论上它确实起作用。
要解决此问题,您需要通过将以下命令添加到 Dockerfile来附加到.bashrc
正确的内容:PATH
RUN echo "export PATH=/new/path:${PATH}" >> /root/.bashrc
在您的 Dockerfile 中添加一行,ENV PATH xxx
请参阅此 Dockerfile 中的示例https://gist.github.com/deepak/5933685
我在 irc 聊天中得到了这个问题的答案。在这里给出是为了任何可能遇到此问题的人的利益。许多人在更新时给出了错误的答案,~/.profile
但这没有用。所以使用下面的答案。
~/.bashrc
为用户更新文件或更新全局文件以/etc/enviroment
进行全局更改,这将适用于所有用户。
在.bashrc
导出路径中:export PATH=$PATH:/new/path/bin
在环境中:PATH=$PATH:/new/path/bin
交互式和非交互式 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
Dockerfile 中的命令调用非交互式shell。并且将采用设置的路径ENV
并且bashrc
脚本将不会运行。docker run -it <image> /bin/bash
调用交互式外壳。bashrc
将运行并且可以覆盖任何设置在 中,如果在任何脚本中没有以通常的语法定义ENV
的例子。PATH
PATH=$PATH:/...
bashrc
为了在 2 种操作模式之间保持安全和一致,可以在 Dockerfile 中执行以下操作:
ENV PATH /master/go/bin:${PATH}
RUN echo "${PATH}" >> /etc/bash.bashrc
请注意,这/etc/bash.bashrc
是 Debian 的位置,可能在其他发行版映像上有所不同。
这是我的 docker 文件,在 Centos 上我已经提取并设置了 java 主路径,它对我有用。
Dockerfile:
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}"