【发布时间】:2018-06-26 04:00:56
【问题描述】:
我在 Docker(在 Kubernetes 中)运行 .NET Core 应用,将环境变量传递给 Docker 容器并在我的应用中使用它们。
在我的 .NET Core 应用程序中,我有以下 C# 类:
public class EnvironmentConfiguration
{
public string EXAMPLE_SETTING { get; set; }
public string MY_SETTING_2 { get; set; }
}
我这样设置我的appsettings:
config.
AddJsonFile("appsettings.json").
AddJsonFile($"appsettings.docker.json", true).
AddEnvironmentVariables();
DI 设置:
services.Configure<EnvironmentConfiguration>(Configuration);
在我的控制器中,我这样使用它:
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/my")]
public class MyController : Controller
{
private readonly IOptions<EnvironmentConfiguration> _environmentConfiguration;
public MyController(IOptions<EnvironmentConfiguration> environmentConfiguration)
{
_environmentConfiguration = environmentConfiguration;
}
}
我运行 docker:
docker run -p 4000:5000 --env-file=myvariables
文件myvariables 如下所示:
EXAMPLE_SETTING=example!!!
MY_SETTING_2=my-setting-2!!!!
这行得通。我可以使用我的_environmentConfiguration 并查看我的变量是否已设置。
但是...我想将环境变量与 appsettings 合并,以便在找不到环境变量时将 appsettings 中的值用作后备。以某种方式合并这两行:
services.Configure<EnvironmentConfiguration>(settings => Configuration.GetSection("EnvironmentConfiguration").Bind(settings));
services.Configure<EnvironmentConfiguration>(Configuration);
这有可能吗?
我的后备计划是继承 EnvironmentConfiguration 类并使用单独的 DI 注入两个单独的配置,然后在代码中“手动”合并它们,但这种解决方案是不可取的。
【问题讨论】:
-
我正在研究实现这样的目标,@Marcus,您能否将 dockerfile 添加到问题中以供我参考?如果您可以有 2 个版本,分别列出 env 文件和 env ,那就太好了。非常感谢
标签: docker .net-core environment-variables config