我有以下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"
Run Code Online (Sandbox Code Playgroud)
但是,我想使web.debug.config文件成为构建时传递的参数。所以我将最后一行更改为:
RUN powershell /Build/Transform.ps1 -xml "/inetpub/wwwroot/web.config" -xdt "/inetpub/wwwroot/${transform}"
Run Code Online (Sandbox Code Playgroud)
当我这样做时,${transform}参数不会被插值,而是被转换为空字符串。我已经确认transform参数正确传递,因为我可以这样做:
COPY ${transform} /inetpub/wwwroot/
Run Code Online (Sandbox Code Playgroud)
...文件被复制。还有其他使用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"
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,它对我有用。
更新:发现另一种有效的方法
这可能是使用环境变量的更好方法:
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"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Docker 将评估该参数transform并将其设置为环境变量TransformFile。当我在 PowerShell 脚本中使用它时,评估参数的不再是 Docker,而是 Powershell 本身。因此,必须使用 Powershell 语法来插入环境变量。
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |