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

Docker ARG变量不工作(始终为空),docker,dockerfile,Docker,Dockerfile,为什么dockerfile中的ARG变量总是空的 命令 docker build--rm--force rm--no cache-f./Dockerfile Dockerfile ARG应用程序_NAME='地面站' 来自节点:当前作为生成节点 WORKDIR/${APP_NAME} 运行echo“APP_NAME=${APP_NAME}” 输出 在步骤4中,APP_NAME始终为空 我在寻找解决办法,但我所找到的只是。我尝试了——没有缓存,但仍然不起作用 docker版本的输出 。在第一

为什么dockerfile中的ARG变量总是空的

命令
docker build--rm--force rm--no cache-f./Dockerfile
Dockerfile
ARG应用程序_NAME='地面站'
来自节点:当前作为生成节点
WORKDIR/${APP_NAME}
运行echo“APP_NAME=${APP_NAME}”
输出 在步骤4中,
APP_NAME
始终为空

我在寻找解决办法,但我所找到的只是。我尝试了
——没有缓存,但仍然不起作用


docker版本的输出
。在第一个
FROM
步骤之前,
ARG
仅适用于
FROM
步骤。在每个
FROM
步骤中,它仅适用于
ARG
步骤之后的行,直到下一个
FROM
(在多级构建中)

要解决此问题,请重新排列步骤:

FROM node:current AS build-node
ARG APP_NAME='ground-station'
WORKDIR /${APP_NAME}
RUN echo "APP_NAME=${APP_NAME}"

是否有一种方法可以从
为所有
设置变量?我的完整Dockerfile中有多个目标(或FROM),我的目标是为所有目标全局设置变量。您可以在每个阶段添加相同的
ARG
步骤。理想情况下,在您需要使用arg之前,可以在其他步骤上执行缓存。更改ARG的值时,下一个运行步骤(不管是否有
$ARG
条目,因为ARG是作为环境变量传递的,可能会以docker无法预测的方式影响该步骤),或使用该ARG的
$var
的任何其他步骤,都将导致缓存未命中。@elig。链接文档中描述了为多阶段生成设置相同的参数。
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
FROM node:current AS build-node
ARG APP_NAME='ground-station'
WORKDIR /${APP_NAME}
RUN echo "APP_NAME=${APP_NAME}"