【问题标题】:Docker for Windows Containers environment variablesDocker for Windows 容器环境变量
【发布时间】:2021-07-02 02:43:39
【问题描述】:

好的,这对于 Linux 容器来说似乎很容易,但我正在尝试使用 Windows 容器来完成这件事,这很烦人。

我有一个构建项目的 Windows Dockerfile,构建过程的一部分是还原 C# AssemblyInfo.cs 文件,以便构建的程序集具有来自 CI 环境 (Devops) 的构建版本

我正在使用 Powershell 脚本 https://github.com/microsoft/psi/blob/master/Build/ApplyVersionToAssemblies.ps1,它需要 2 个环境变量,我可以硬编码一个,所以不是问题,但 BUILD_BUILDNUMBER 环境变量需要从 Devops 构建系统注入。

我尝试了以下方法,但都不起作用

ARG BUILD_BUILDNUMBER
ENV BUILD_BUILDNUMBER=$BUILD_BUILDNUMBER
RUN ApplyVersionToAssemblies.ps1

正在运行

docker build -f Dockerfile --build-arg BUILD_BUILDNUMBER=1.2.3.4 .

还有

RUN SETX BUILD_BUILDNUMBER $BUILD_BUILDNUMBER
RUN SETX BUILD_BUILDNUMBER %BUILD_BUILDNUMBER%

还有一些我不记得的其他组合,我最终做了什么,但似乎是一个 hack 是通过 COPY 将 BUILDNUMBER 作为文件传递,然后修改 Powershell 脚本以将其读入其局部变量

所以目前它可以工作,但我真的很想知道这应该如何通过 ARG 和 ENV 为 Windows 容器构建工作

Windows Containers 绝对感觉像是 Linux 容器的可怜表弟 :)

【问题讨论】:

  • 据我所知,ENV 在 windows docker 中不起作用。它只是坏了。它对任何 RUN 命令都不可见,并且在最终构建的映像中未设置环境变量。就好像 ENV 完全没有效果一样。

标签: windows docker environment-variables containers


【解决方案1】:

Docker Windows 容器中的 CMD 示例:

ARG FEED_ACCESSTOKEN
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"https://URL.com/_packaging/Name/nuget/v3/index.json\", \"username\":\"PATForPackages\", \"password\":\"${FEED_ACCESSTOKEN}\"}]}"

SHELL ["cmd", "/S", "/C"]
RUN echo %VSS_NUGET_EXTERNAL_FEED_ENDPOINTS%

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 2016-05-30
    • 1970-01-01
    • 2018-12-02
    • 2016-03-07
    • 2015-09-18
    • 1970-01-01
    • 2020-02-23
    • 2016-11-29
    相关资源
    最近更新 更多