首页 > 解决方案 > Docker for Windows 容器环境变量

问题描述

好的,这对于 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%

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

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

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

标签: windowsdockerenvironment-variablescontainers

解决方案


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%

推荐阅读