如何使用 Powershell 在 Docker 运行 命令中扩展参数?

How to I expand arguments in a Docker RUN command using Powershell?

我有一个 Dockerfile,它使用 Windows Nano Server 基础映像并使用 Powershell 作为 shell:

FROM microsoft/nanoserver
SHELL ["powershell"]

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

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

但是 none 这些工作。

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

通过 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 和 Linux 容器上使用 bash shell 这两种情况下的表示法相同。