Docker for Windows 容器环境变量

问题描述 投票:0回答:2

好吧,这对于 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 脚本以将其读入其本地变量

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

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

windows docker environment-variables containers
2个回答
0
投票

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%

0
投票

我通过惨痛的经历(在任何地方都找不到相关记录)了解到,从容器外部设置的环境变量(至少在 Windows 容器的情况下)是在进程级别设置的。不是在机器级别。问题在于 Windows 容器具有多个内部移动部件(IIS、计划任务等),我有点期望这些环境变量在系统范围内可用,而不仅仅是用于入口点或远程 shell。

解决方案....在入口点编写一个脚本来获取进程级环境变量并将它们传播到系统级。

© www.soinside.com 2019 - 2024. All rights reserved.