Dockerfile ARG始终为null

时间:2017-11-28 16:10:07

标签: docker

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

拥有以下dockerfile:

FROM microsoft/iis
ARG SOMEARG=test

SHELL ["powershell", "-command"]

RUN Write-Host 'HERE:';`
    Write-Host ${SOMEARG}

我有输出:

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

2 个答案:

答案 0 :(得分:2)

使用ARG的{​​{1}}值并将默认ArgName设置为 PowerShell 可以通过参考SHELL来完成。

请记住要understand how ARG and FROM interact

$env:ArgName之前声明的ARG在构建阶段之外 ,因此不能 FROM。要使用在第一个FROM之前声明的ARG的默认值,请使用FROM指令,在构建阶段内部不带任何值。

答案 1 :(得分:1)

实际上这已经解决here

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

FROM microsoft/iis
ARG SOMEARG=test

SHELL ["powershell", "-command"]

RUN Write-Host 'HERE:';`
    Write-Host %SOMEARG%