如何使用父 Docker 文件中的环境变量?

Len*_*and 1 environment environment-variables parameter-passing docker

我有两个 Dockerfiles Dockerfile.A&Dockerfile.B其中Dockerfile.B使用 FROM 关键字继承Dockerfile.A。我Dockerfile.A设置了一个我想在Dockerfile.B(PATH)中使用的环境变量。这可能吗?我该怎么做?


到目前为止,我已经尝试过以下操作Dockerfile.A

  1. RUN export PATH=/my/new/dir:$PATH
    
    Run Code Online (Sandbox Code Playgroud)
  2. ENV PATH=/my/new/dir:$PATH
    
    Run Code Online (Sandbox Code Playgroud)
  3. RUN echo "PATH=/my/new/dir:$PATH" >/etc/profile
    
    Run Code Online (Sandbox Code Playgroud)

和 中Dockerfile.B,分别:

  1. 只需使用路径中的工具来查看它们是否可用(它们不可用)

  2. ENV PATH
    
    Run Code Online (Sandbox Code Playgroud)
  3. RUN source /etc/profile
    
    Run Code Online (Sandbox Code Playgroud)

我意识到每个 RUN 命令都是在它自己的环境中执行的,这可能就是 ENV 关键字存在的原因,以便可以独立于 RUN 命令来处理环境。但我不确定这对我的情况意味着什么。

那么我该怎么做呢?

joh*_*s85 5

按我的预期工作。

Dockerfile.A

FROM alpine:3.6
ENV TEST=VALUE
Run Code Online (Sandbox Code Playgroud)

建造它。

docker build -t imageA .
Run Code Online (Sandbox Code Playgroud)

Dockerfile.B

FROM imageA
CMD echo $TEST
Run Code Online (Sandbox Code Playgroud)

建造它。

$ docker build -t imageB .
Run Code Online (Sandbox Code Playgroud)

运行

$ docker run -it imageB
VALUE
Run Code Online (Sandbox Code Playgroud)

  • CMD 不是 RUN,我想要构建时的值,也不是 tun 时的值! (2认同)