在Windows上构建容器时Docker构建变量始终为空

时间:2018-06-22 01:05:24

标签: docker dockerfile

我无法为我的生命填充dockerfile中的ARG。 Windows平台上完全支持吗?

我的Docker文件:

>type Dockerfile
FROM microsoft/nanoserver
ARG arg1
RUN echo "${arg1}"

我的图像构建命令:

docker image build -t argtest  . --build-arg arg1=ValueForArg1

和结果:

Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM microsoft/nanoserver
 ---> a6688cd24441
Step 2/3 : ARG arg1
 ---> Using cache
 ---> 97770e203c82
Step 3/3 : RUN echo "${arg1}"
 ---> Running in ca6545d4bd0e
"${arg1}"
Removing intermediate container ca6545d4bd0e
 ---> c296d654afef
Successfully built c296d654afef
Successfully tagged argtest:latest

2 个答案:

答案 0 :(得分:2)

问题实际上是Windows如何以其脚本/批处理语言表示变量。结果,echo命令(和任何其他命令)在Windows中不像在大多数其他操作系统中一样起作用。由于Dockerfile是在主机操作系统(即Windows)而非容器中运行的,因此它将使用Windows的语法来表示命令和变量。

如果您使用

RUN echo "%arg1%"

(或您正在运行的任何命令),它应该可以为您工作。

答案 1 :(得分:0)

在 Dockerfile 中使用 powershell 时,您需要使用 powershell 等效的环境变量符号:$env:variable

# RUN echo "${arg1}"
RUN echo $env:arg1

${arg1} 中使用 powershell 只会呈现一个空字符串。