2

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

FROM microsoft/nanoserver
SHELL ["powershell"]

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

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

但这些都不起作用。

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

4

1 回答 1

6

传递给 Powershell 命令的参数RUN不是由 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 上令人困惑,因为在使用bashshell 的 Linux 容器上,这两种情况下的符号是相同的。

于 2019-03-21T01:17:55.493 回答