Docker ARG 变量不起作用(始终为空)

Dru*_*ney 6 docker dockerfile

为什么我的 dockerfile 中的 ARG 变量始终为空?

命令

docker build --rm --force-rm --no-cache -f ./Dockerfile
Run Code Online (Sandbox Code Playgroud)

Dockerfile

ARG APP_NAME='ground-station'

FROM node:current AS build-node
WORKDIR /${APP_NAME}
RUN echo "APP_NAME=${APP_NAME}"
Run Code Online (Sandbox Code Playgroud)

输出

Sending build context to Docker daemon  1.199MB
Step 1/4 : ARG APP_NAME='ground-station'
Step 2/4 : FROM node:current AS build-node
 ---> 6e72986b1b6e
Step 3/4 : WORKDIR /${APP_NAME}
 ---> Running in 39f12e36d4a1
Removing intermediate container 39f12e36d4a1
 ---> 93f5cdef6402
Step 4/4 : RUN echo "APP_NAME=${APP_NAME}"
 ---> Running in a18ac6f3bee8
APP_NAME=
Removing intermediate container a18ac6f3bee8
 ---> 746cea84bb8f
Successfully built 746cea84bb8f
Run Code Online (Sandbox Code Playgroud)

在第 4 步中,APP_NAME始终为空。

我寻找解决方案,但我发现的只是这个。我尝试过,--no-cache但仍然不起作用。


输出docker version

Client: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:17:52 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:15:47 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 12

ARG步骤是有范围的。在第一步之前FROMARG仅适用于FROM步骤。在每个FROM步骤中,它仅适用于该步骤之后的行,ARG直到下一个步骤FROM(在多阶段构建中)。

要解决此问题,请重新排序您的步骤:

FROM node:current AS build-node
ARG APP_NAME='ground-station'
WORKDIR /${APP_NAME}
RUN echo "APP_NAME=${APP_NAME}"
Run Code Online (Sandbox Code Playgroud)