Geo*_*rgS 3 windows powershell docker dockerfile nano-server
我有一个使用 Windows Nano Server 基础映像并使用 Powershell 作为 shell 的 Dockerfile:
FROM microsoft/nanoserver
SHELL ["powershell"]
Run Code Online (Sandbox Code Playgroud)
我现在想使用命令定义一个变量(或通过 via 传递它--build-arg)ARG,然后在RUN命令中使用它,但我似乎无法让它工作。我试过了:
ARG mydir=tmp
RUN mkdir %mydir%
RUN mkdir $mydir
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用。
如何告诉 docker / powershell 正确扩展我的变量?
通过传递给 Powershell 命令运行的参数RUN不会被 Docker 替换,而是被 Powershell 本身替换。Powershell 将它们视为普通环境变量,因此正确的语法是:
FROM microsoft/nanoserver
SHELL ["powershell"]
ARG mydir=tmp
RUN mkdir $env:mydir
Run Code Online (Sandbox Code Playgroud)
所以用同样的方式你也可以扩展普通的环境变量:
RUN mkdir $env:LOCALAPPDATA\$env:mydir
Run Code Online (Sandbox Code Playgroud)
请注意,这仅在命令上下文中有效RUN。对于其他 Docker 命令,变量仍然使用正常符号扩展:
COPY ./* $mydir
Run Code Online (Sandbox Code Playgroud)
在 Windows/Powershell 上这很令人困惑,因为在使用bashshell 的 Linux 容器上,这两种情况下的表示法是相同的。
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |