我有一个用.NET Core 2.1.1编写的控制台应用程序,我想在一个集群的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添加环境变量时,将通过上述方法来检索变量,但这不是一个选择,因为我需要在运行这些映像或将其添加到群集时在运行时发送输入。 / p>
另一件事要注意,当我检查Docker容器运行时,我在输出JSON数据中看到了环境变量,但是似乎控制台应用程序看不到它们。我可以从控制台应用程序访问其他环境变量,但是我在run命令中添加的变量不可用。
在这一点上,我迷茫了该做什么,因为互联网上的许多示例都说这应该可行。我想念什么吗?可以从应用程序内部获取docker run命令中给出的环境变量吗?
答案 0 :(得分:1)
用于传递环境变量的Docker命令应如下所示:
docker run -i -t my.registry/my-app/my-app/my-app:latest -e VAL1='test' -e VAL2='test'
答案 1 :(得分:1)
参数应在图片之前:
docker run -i -t -e "VAL1=test" -e "VAL2=test" my.registry/my-app/my-app/my-app:latest