我有一个.NET Core控制台应用程序。该控制台应用程序加载存储在环境变量中的连接字符串。我正在使用以下代码检索该连接字符串:
var connectionString = Environment.GetEnvironmentVariable("connection_string");
如果我仅通过在Visual Studio中按“播放”来运行控制台应用程序,则上面的行有效。但是,如果我在Docker容器中运行此控制台应用程序,则connectionString
为空。我认为这是因为connection_string
环境变量不在Docker环境中。但是,我不知道如何在Docker容器中添加/设置环境变量。
为最后一次尝试,我在Dockerfile中添加了以下内容:
ENV connection_string <my_connection_string_value>
但是,这似乎并不重要。我想念什么?
答案 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
。