docker-compose添加到PATH

luk*_*aus 20 docker docker-compose

我需要在docker-compose.yml中添加一些路径到我的PATH

在docker-compose.yml中我试过了

app:
    ...
    environment:
        - PATH /code/project
Run Code Online (Sandbox Code Playgroud)

然而,这只会覆盖现有的PATH - 而我想添加到现有的PATH

Tho*_*eil 14

A docker-compose.yml没有任何意义来扩展已经在Docker镜像中设置的环境变量.

我看到做这些事情的唯一方法是拥有一个Docker镜像,它需要一些环境变量(比方说ADDITONAL_PATH),并在运行时扩展它自己的PATH环境变量.


我们来看看以下Dockerfile:

FROM busybox
ENV PATH /foo:/bar
CMD export PATH=$PATH:$ADDITIONAL_PATH; /bin/echo -e "ADDITIONAL_PATH is $ADDITIONAL_PATH\nPATH is $PATH"
Run Code Online (Sandbox Code Playgroud)

和下面的搬运工-compose.yml文件(在相同的目录中Dockerfile):

app:
  build: .
Run Code Online (Sandbox Code Playgroud)

构建图像: docker-compose build

并启动容器:docker-compose up,您将获得以下输出:

app_1 | ADDITIONAL_PATH是

app_1 | PATH是/ foo:/ bar:

现在将docker-compose.yml文件更改为:

app:
  build: .
  environment:
    - ADDITIONAL_PATH=/code/project
Run Code Online (Sandbox Code Playgroud)

并启动一个容器:docker-compose up,您现在将获得以下输出:

app_1 | ADDITIONAL_PATH是/ code/project

app_1 | PATH是/ foo:/ bar:/ code/project


另请注意docker-compose.yml文件中的语法错误:=环境变量名称与其值之间必须有等号().

environment:
    - PATH=/code/project
Run Code Online (Sandbox Code Playgroud)

代替

environment:
    - PATH /code/project
Run Code Online (Sandbox Code Playgroud)


Roc*_*n17 10

我知道这是一个旧线程,但我认为有几件事可以澄清。

通过docker-compose文件只能从主机寻址变量,因此不可能从 docker-compose.yml 扩展图像的 PATH:

app:
    ...
    environment:
        - PATH=/code/project:$PATH
Run Code Online (Sandbox Code Playgroud)

另一方面,由于EXPORTED变量不会通过图像持久化,因此使用 RUN 或 CMD EXPORT 指令是不够的。由于每个 Dockerfile 指令都会生成一个中间映像,因此这些值将反映在它们中,而不是反映在您实际需要它们的主映像中。

最好的选择是在以下位置使用构建选项docker-compose.yml

  app:
    build: .
Run Code Online (Sandbox Code Playgroud)

并将 ENV 选项添加到Dockerfile

ENV PATH /path/to/bin/folder:$PATH

这是在 issue #684 中建议的,我还建议查看答案:docker ENV vs RUN export


luk*_*aus -8

将单个位置添加到 docker-compose.yml 文件中的 PATH:

app
    environment:
        - PATH=/code/project:$PATH
Run Code Online (Sandbox Code Playgroud)

将多个位置添加到 docker-compose.yml 文件中的 PATH

app
    environment:
        - PATH=/code/project:/code/lib:/foo/bar:$PATH
Run Code Online (Sandbox Code Playgroud)

添加到您的 PYTHONPATH

app
    environment:
        - PYTHONPATH=/code/project:/code/lib:/foo/bar
Run Code Online (Sandbox Code Playgroud)

  • 这里的 $PATH 将替换为运行 docker-compose 命令的计算机上定义的值。这不会扩展原始 PATH 环境变量的值,因为它在 docker 映像中。 (17认同)
  • 很抱歉,我认为它不起作用,请参阅[此要点](https://gist.github.com/thomasleveil/7428032dcfe9a13432e0),在 CentOS 6.7 上使用 docker-compose v1.5.2 (7认同)
  • 您确定您的 docker 主机系统和 docker 映像上的 PATH 值不相同吗?这是巧合吗? (4认同)
  • @Thomaslevel 是正确的。这只是使用运行“docker-compose”的主机的值。事实上,容器中存在相同的“PATH”,并不意味着按照OP描述的方式“它可以工作”。尝试将值添加到主机 shell 中的“PATH”,然后运行“docker-compose”。您会看到它们出现在容器“PATH”中。然后尝试清除主机 shell 中的“PATH”,您会发现它不再“工作”。此外,使用 `env_file` 来执行此操作只会将 `$PATH` 解释为字符串文字。 (3认同)