我花了很多时间来弄清楚这一点。我想要实现的是将连接字符串作为 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)
使用默认设置为PowerShellARG的值可以通过参考 来完成。ArgNameSHELL$env:ArgName
只需记住了解 ARG 和 FROM 如何交互:
\n\n\n\n
ARG在 a 之前声明的 a位于FROM构建阶段之外,因此它不能在 a 之后的任何指令中使用\xe2\x80\x99FROM。ARG要使用在第一次FROM使用之前声明的默认值ARG构建阶段内没有值的指令
其实这里已经解决了。
由于您使用的是 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)
| 归档时间: |
|
| 查看次数: |
3972 次 |
| 最近记录: |