我有一个使用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正确扩展变量?
答案 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容器上的混淆,在两种情况下的表示法是相同的。