在Docker托管的.NET Core控制台应用程序中使用环境变量

时间:2018-08-10 22:48:25

标签: docker

我有一个.NET Core控制台应用程序。该控制台应用程序加载存储在环境变量中的连接字符串。我正在使用以下代码检索该连接字符串:

var connectionString = Environment.GetEnvironmentVariable("connection_string");

如果我仅通过在Visual Studio中按“播放”来运行控制台应用程序,则上面的行有效。但是,如果我在Docker容器中运行此控制台应用程序,则connectionString为空。我认为这是因为connection_string环境变量不在Docker环境中。但是,我不知道如何在Docker容器中添加/设置环境变量。

为最后一次尝试,我在Dockerfile中添加了以下内容:

ENV connection_string <my_connection_string_value>

但是,这似乎并不重要。我想念什么?

2 个答案:

答案 0 :(得分:2)

您应该能够通过配置生成器轻松引用环境变量。

var configuration = new ConfigurationBuilder()
  .AddJsonFile("appsettings.json")
  //...
  .AddEnvironmentVariables()
  .Build();

引用通过DI使用IConfiguration。

private readonly IConfiguration _configuration;

public ClassConstructor(IConfiguration configuration)
{
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));

var connectionString = _configuration.GetValue("connection_string");
}

答案 1 :(得分:0)

可接受的答案假定使用配置环境的ASP.NET Core环境。但是,在纯控制台应用程序中,只需使用Environment.GetEnvironmentVariable即可。

这似乎不读取在 Dockerfile 中定义或作为参数 -e 提供的环境变量。

以这种方式定义的变量将在当前过程中移交。这不是默认行为。因此,以下访问将起作用:

Environment.GetEnvironmentVariable("VAR_NAME", EnvironmentVariableTarget.Process)

键是第二个参数EnvironmentVariableTarget.Process