如何使用 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 这两种情况下的表示法相同。
我有一个 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 这两种情况下的表示法相同。