我花了很多时间来深究这一点。我想要实现的是将连接字符串作为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
答案 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%