gpt4 book ai didi

docker - 在 RUN 语句中使用 dockerfile 参数

转载 作者:IT老高 更新时间:2023-10-28 21:38:52 31 4
gpt4 key购买 nike

我有以下 Dockerfile,它可以工作:

FROM someimage
ARG transform

COPY Web*.config /inetpub/wwwroot/
RUN powershell /Build/Transform.ps1 -xml "/inetpub/wwwroot/web.config" -xdt "/inetpub/wwwroot/web.debug.config"

但是,我想让 web.debug.config 文件成为我构建时传入的参数。所以我把最后一行改成:

RUN powershell /Build/Transform.ps1 -xml "/inetpub/wwwroot/web.config" -xdt "/inetpub/wwwroot/${transform}"

当我这样做时,${transform} 参数不会被插值并被转换为空字符串。我已经确认 transform 参数被正确传递,因为我可以这样做:

COPY ${transform} /inetpub/wwwroot/

...文件被复制。是否有其他方法可以使用 RUN 命令在字符串中插入参数?

我在 Windows 10 上使用 Docker 18.03.1-ce。

最佳答案

嗯,我找到了一个可行的解决方案,但它绝对不理想。看起来变量根本没有在 RUN 语句中扩展(至少在 Windows 上,没有尝试过 Linux)。但是,COPY 语句将扩展它们。所以,我可以将我的文件复制到一个带有硬编码名称的临时文件中,然后使用它:

COPY ./ /inetpub/wwwroot/
COPY ${transform} /inetpub/wwwroot/Web.Current.config
RUN powershell -executionpolicy bypass /Build/Transform.ps1 -xml "/inetpub/wwwroot/web.config" -xdt "/inetpub/wwwroot/Web.Current.config"

在这种特殊情况下,它对我有用。

更新:找到另一种有效的方法

这可能是使用环境变量的更好方法:

FROM someimage
ARG transform
ENV TransformFile ${transform}

COPY ./ /inetpub/wwwroot/
RUN powershell -executionpolicy bypass /Build/Transform.ps1 -xml "/inetpub/wwwroot/web.config" -xdt "/inetpub/wwwroot/$ENV:TransformFile"

在这种情况下,Docker 将评估参数 transform 并将其设置为环境变量 TransformFile。当我在 PowerShell 脚本中使用它时,评估参数的不再是 Docker,而是 Powershell 本身。因此,必须使用用于插入环境变量的 Powershell 语法。

关于docker - 在 RUN 语句中使用 dockerfile 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50616050/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com