Docker Run命令中的环境变量未传递到.NET Core Console应用程序中

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

我有一个用.NET Core 2.1.1编写的控制台应用程序,我希望在swarm中的docker服务中运行。控制台应用程序需要一些我想通过环境变量传入的输入值。目前,我有以下Dockerfile构建控制台应用程序,最终图像被推送到注册表。

FROM microsoft/dotnet:latest AS builder
WORKDIR /app
COPY MyApp.sln ./MyApp.sln
COPY src/MyApp.Console/*.csproj ./MyApp.Console/
COPY src/MyApp.Core/*.csproj ./MyApp.Core/
COPY src/MyApp.Infrastructure/*.csproj ./MyApp.Infrastructure/
WORKDIR /app/MyApp.Console
RUN dotnet restore MyApp.Console.csproj

WORKDIR /app/
COPY src/MyApp.Console/. ./MyApp.Console/
COPY src/MyApp.Core/. ./MyApp.Core/
COPY src/MyApp.Infrastructure/. ./MyApp.Infrastructure/
WORKDIR /app/MyApp.Console
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:runtime AS runtime
WORKDIR /app
COPY --from=builder /app/MyApp.Console/out ./
ENTRYPOINT ["dotnet", "MyApp.Console.dll"]

我正在使用来自Web服务的Docker C#API,它将下拉图像并将图像作为服务内部的服务运行。

但是现在,我正在使用本地测试

docker run -i -t my.registry/my-app/my-app/my-app:latest -e "VAL1=test" -e "VAL2=test"

但是当我输出环境变量的值时

var var1 = Environment.GetEnvironmentVariable("VAL1");
System.Console.WriteLine($"Variable 1: {var1}");

它是空的。我也尝试使用内置的ConfigurationBuilder API,但它也没有返回该环境变量的值:

Configuration = new ConfigurationBuilder()
   .SetBasePath(Directory.GetCurrentDirectory())
   .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
   .AddEnvironmentVariables()
   .Build();

var var1 = Configuration["VAL1"];
System.Console.WriteLine($"Variable 1: {var1}");

但它也没有为该变量返回任何内容。当我通过Dockerfile添加环境变量时,通过上面的方法检索变量,但这不是一个选项,因为我需要在运行这些图像或添加到swarm的运行时期间发送输入。

另外需要注意的是,当我在运行时检查Docker容器时,我在输出JSON数据中看到了环境变量,但似乎控制台应用程序看不到它们。我可以从控制台应用程序访问其他环境变量,但是我在run命令中添加的变量不可用。

在这一点上,我不知所措,因为互联网上有很多例子说这应该有用。我错过了什么吗?可以从应用程序中获取docker run命令中给出的环境变量吗?

docker .net-core
2个回答
1
投票

用于传递环境变量的Docker命令应该是这样的:

docker run -i -t my.registry/my-app/my-app/my-app:latest -e VAL1='test' -e VAL2='test'

1
投票

参数应该出现在图像之前:

docker run -i -t -e "VAL1=test" -e "VAL2=test" my.registry/my-app/my-app/my-app:latest 
© www.soinside.com 2019 - 2024. All rights reserved.