94

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

PATH = $PATH:/required/path

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

export PATH

即使在重新启动容器和主机后它也不起作用。

4

6 回答 6

165

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

ENV PATH "$PATH:/new/path"

Dockerfile中应该可以工作。

于 2016-08-11T20:03:49.483 回答
28

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

于 2019-12-11T19:55:12.330 回答
12

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

于 2015-02-25T16:09:46.153 回答
10

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

~/.bashrc为用户更新文件或更新全局文件以/etc/enviroment进行全局更改,这将适用于所有用户。

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

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

于 2015-03-03T13:21:39.687 回答
1

交互式和非交互式 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
  • RUNDockerfile 中的命令调用非交互式shell。并且将采用设置的路径ENV并且bashrc脚本将不会运行。
  • docker run -it <image> /bin/bash调用交互式外壳。bashrc将运行并且可以覆盖任何设置在 中,如果在任何脚本中没有以通常的语法定义ENV的例子。PATHPATH=$PATH:/...bashrc

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

ENV PATH /master/go/bin:${PATH}
RUN echo "${PATH}" >> /etc/bash.bashrc

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

于 2021-10-11T16:31:03.427 回答
1

这是我的 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}"
于 2020-12-21T16:36:26.553 回答