在 Windows dockerfile 中,如何将 ARG 值传递给 RUN 命令?

Tri*_*nko 5 windows environment-variables args docker

我找不到任何有效的语法。即使 stackoverflow 上建议的解决方案也不起作用。运行它们会在预期值处显示空白输出。

ENV 变量不会保留在构建的映像中(即,从正在运行的容器中的命令行运行“set”显示该变量未设置)。

ARG 和 ENV 值似乎都无法在发送到 powershell 的 RUN 命令中访问。

“testdockerfile”的内容:

ARG TEST_ARG=value_to_insert_in_debug_txt_file

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2016

ENV MyEnvVar ${TEST_ARG}
ENV MyEnvVar2 $TEST_ARG
ENV MyEnvVar3 TEST_ARG

SHELL ["powershell","-Command"]

RUN "\"baseline\" | Out-File c:\debug.txt"

RUN "\"%TEST_ARG%\" | Out-File c:\debug1.txt"
RUN "\"$TEST_ARG\" | Out-File c:\debug2.txt"
RUN "\"${TEST_ARG}\" | Out-File c:\debug3.txt"
RUN "\"${Env:TEST_ARG}\" | Out-File c:\debug4.txt"

RUN "\"%MyEnvVar%\" | Out-File c:\debug5.txt"
RUN "\"$MyEnvVar\" | Out-File c:\debug6.txt"
RUN "\"${MyEnvVar}\" | Out-File c:\debug7.txt"
RUN "\"${Env:MyEnvVar}\" | Out-File c:\debug8.txt"
RUN "\"$Env:MyEnvVar\" | Out-File c:\debug9.txt"

RUN "\"%MyEnvVar2%\" | Out-File c:\debug10.txt"
RUN "\"$MyEnvVar2\" | Out-File c:\debug11.txt"
RUN "\"${MyEnvVar2}\" | Out-File c:\debug12.txt"
RUN "\"${Env:MyEnvVar2}\" | Out-File c:\debug13.txt"
RUN "\"$Env:MyEnvVar2\" | Out-File c:\debug14.txt"

RUN "\"%MyEnvVar3%\" | Out-File c:\debug15.txt"
RUN "\"$MyEnvVar3\" | Out-File c:\debug16.txt"
RUN "\"${MyEnvVar3}\" | Out-File c:\debug17.txt"
RUN "\"${Env:MyEnvVar3}\" | Out-File c:\debug18.txt"
RUN "\"$Env:MyEnvVar3\" | Out-File c:\debug19.txt"
Run Code Online (Sandbox Code Playgroud)

运行以下docker命令

docker build -f testdockerfile --no-cache -t test-app --build-arg "TEST_ARG=value_to_insert_in_debug_txt_file"
Run Code Online (Sandbox Code Playgroud)

这些文件中的每一个都已成功创建,但是(除了基线之外)它们要么是空的,要么包含提供的文字之一:

debug.exe contains "baseline" (expected)
debug1.txt contains "%TEST_ARG%"
debug10.txt contains "%MyEnvVar2%"
debug15.txt contains "%MyEnvVar3%"
debug18.txt contains "TEST_ARG"
debug19.txt contains "TEST_ARG"
debug5.txt contains "%MyEnvVar%"
all other files exist but are empty
Run Code Online (Sandbox Code Playgroud)

似乎不可能将任何提供的 ARG 值放入 dockerfile 中的 powershell 脚本中。

Tri*_*nko 4

出现在 FROM 指令之前的 ARG 值在 FROM 指令之后不可用。

ARG 值必须在 FROM 指令之后重新声明,以使其在 FROM 指令之后可用。

ARG TEST_ARG=value_to_insert_in_debug_txt_file

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2016

ARG TEST_ARG=value_to_insert_in_debug_txt_file

ENV MyEnvVar ${TEST_ARG}
ENV MyEnvVar2 $TEST_ARG
ENV MyEnvVar3 TEST_ARG
...
Run Code Online (Sandbox Code Playgroud)