如何使用Powershell扩展Docker RUN命令中的参数?

时间:2019-03-21 01:17:55

标签: windows powershell docker dockerfile nano-server

我有一个使用Windows Nano Server基本映像并使用Powershell作为shell的Dockerfile:

FROM microsoft/nanoserver
SHELL ["powershell"]

我现在想使用--build-arg命令定义一个变量(或通过ARG传递变量),然后在RUN命令中使用它,但是我似乎无法让它工作。我尝试过:

ARG mydir=tmp
RUN mkdir %mydir%
RUN mkdir $mydir

但是这些都不起作用。

如何告诉docker / powershell正确扩展变量?

1 个答案:

答案 0 :(得分:1)

通过RUN运行的传递给Powershell命令的参数不是由Docker替代的,而是由Powershell本身替代的。 Powershell将它们视为正常的环境变量,因此正确的语法是:

FROM microsoft/nanoserver
SHELL ["powershell"]
ARG mydir=tmp
RUN mkdir $env:mydir

因此,您也可以用相同的方式扩展正常的环境变量:

RUN mkdir $env:LOCALAPPDATA\$env:mydir

请注意,这仅在RUN命令的上下文中有效。对于其他Docker命令,变量仍会使用常规符号扩展:

COPY ./* $mydir

在Windows / Powershell上与使用bash shell的Linux容器上的混淆,在两种情况下的表示法是相同的。