docker - 来自 Docker 运行命令的环境变量未传递到 .NET Core 控制台应用程序
问题描述
我有一个用 .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,该服务将拉下图像并将图像作为 swarm 中的服务运行。
但是现在,要在本地测试我正在使用
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 添加环境变量时,这些变量是通过上述方法检索的,但这不是一个选项,因为我需要在运行这些图像或将这些图像添加到群时发送输入。
另外需要注意的是,当我在 Docker 容器运行时检查它时,我在输出的 JSON 数据中看到了环境变量,但控制台应用程序似乎看不到它们。我可以从控制台应用程序访问其他环境变量,但我在运行命令中添加的那些不可用。
在这一点上,我不知道该怎么做,因为互联网上的很多例子都说这应该有效。我错过了什么吗?可以从应用程序中获取 docker run 命令中给出的环境变量吗?
解决方案
参数应该放在图像之前:
docker run -i -t -e "VAL1=test" -e "VAL2=test" my.registry/my-app/my-app/my-app:latest
推荐阅读
- security - 保存 RSA 私钥
- python - Otreeを使用してエラーをカウントする
- java - 为什么 return 语句不退出 while 循环,而是返回到 while 循环的第一行?
- java - 将多个数组写入 Arraylist
- c++ - 从 C++ 更新 QML 对象的正确方法?
- python - 如何在seaborn的散点图中设置顶部(重叠)的色调
- python - 分配前引用的变量,但已正确分配
- python - 熊猫数据帧之间的 if 和语句
- python - 为什么函数调用在字典中的python中不起作用
- javascript - 无法删除/更新 ajax laravel 中的新项目