Dockerfile ARG 始终为空

Dim*_*imt 5 docker

我花了很多时间来弄清楚这一点。我想要实现的是将连接字符串作为 docker-compose 的构建参数传递给 dockerfile。下面是一个非常简单的片段,重现了这个问题。的输出Write-Host ${SOMEARG}始终为空。

有以下 dockerfile:

FROM microsoft/iis
ARG SOMEARG=test

SHELL ["powershell", "-command"]

RUN Write-Host 'HERE:';`
    Write-Host ${SOMEARG}
Run Code Online (Sandbox Code Playgroud)

我有输出:

Step 1/4 : FROM microsoft/iis
 ---> 85fb57957cf1
Step 2/4 : ARG SOMEARG=test
 ---> Running in 84a7fc37994c
Removing intermediate container 84a7fc37994c
 ---> 2099e56f466f
Step 3/4 : SHELL ["powershell", "-command"]
 ---> Running in 61852677a26a
Removing intermediate container 61852677a26a
 ---> b934f778c13b
Step 4/4 : RUN Write-Host 'HERE:';    Write-Host ${SOMEARG}
 ---> Running in 3fde911ecdc1
HERE:

Removing intermediate container 3fde911ecdc1
 ---> 5331ce22c3ec
Successfully built 5331ce22c3ec
Run Code Online (Sandbox Code Playgroud)

Rik*_*kki 6

使用默认设置为PowerShellARG的值可以通过参考 来完成。ArgNameSHELL$env:ArgName

\n

只需记住了解 ARG 和 FROM 如何交互

\n
\n

ARG在 a 之前声明的 a位于FROM构建阶段之外,因此它不能在 a 之后的任何指令中使用\xe2\x80\x99FROMARG要使用在第一次FROM使用之前声明的默认值ARG构建阶段内没有值的指令

\n
\n


yam*_*enk 1

其实这里已经解决了。

由于您使用的是 Windows 容器,因此应使用 cmd 来引用构建参数,%%因为 cmd 是默认 shell。

FROM microsoft/iis
ARG SOMEARG=test

SHELL ["powershell", "-command"]

RUN Write-Host 'HERE:';`
    Write-Host %SOMEARG%
Run Code Online (Sandbox Code Playgroud)