【问题标题】:How to I expand arguments in a Docker RUN command using Powershell?如何使用 Powershell 在 Docker RUN 命令中扩展参数?
【发布时间】:2019-03-21 01:17:55
【问题描述】:

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

FROM microsoft/nanoserver
SHELL ["powershell"]

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

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

但这些都不起作用。

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

【问题讨论】:

    标签: windows powershell docker dockerfile nano-server


    【解决方案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 容器上一样令人困惑,这两种情况下的符号是相同的。

    【讨论】:

    • 这绝对不适用于 Windows。
    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多