gpt4 book ai didi

c# - 环境变量更改时重新加载配置

转载 作者:IT老高 更新时间:2023-10-28 21:37:30 25 4
gpt4 key购买 nike

在 Startup.cs 文件中我有

public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}

appsettings.json 文件配置。喜欢:

{
"Log" : {
"Type" : "value from appsettings.json"
}
}

reloadOnChange 设置为 true,因此,当我更改 appsettings.json 时,我会立即在我的程序中获得一个新的日志类型值.

但我将 Docker 与 docker-compose 一起使用,并通过 env 变量传递设置值。我的 docker-compose.override.yml 文件是:

version: '3.7'

services:

myservice:
environment:
ASPNETCORE_ENVIRONMENT: Development
Log__Type: "value from docker-compose"

要运行,我使用 `docker-compose up.现在我的应用程序具有日志类型的值“来自 docker-compose 的值”。

问题:有什么方法可以在运行时更改 env 变量 (Log__Type) 的值(无需重新启动 docker 容器)并在我的应用程序中重新加载配置用 reloadOnChange 和 appsettings.json 完成了吗?

我尝试连接到容器(docker exec)并设置环境变量的新值

printenv Log__Type  // -> value from docker-compose
export Log__Type=new value
printenv Log__Type // -> new value

但我的应用程序没有重新加载配置,仍然显示日志类型“来自 docker-compose 的值”。

您能否建议如何在运行时使用 docker 更改设置?或者解释一下为什么只有当文件改变而不是环境变量时才会重新加载。

最佳答案

Are there any ways to change a value of env variable at runtime (without restarting docker container)

没有。 (甚至重启也是不够的:您需要删除并重新创建容器。)

这遵循普通的 Unix 模型。一个进程可以为其子进程设置初始环境,但是一旦它执行了子进程,它就无法再控制环境了。 docker exec 在容器命名空间中启动一个新进程,因此如果您在其中更改环境变量,它只会影响该进程,而不影响主容器进程。

在初始 docker run 命令期间只能设置大量选项。这包括环境变量,还包括卷安装和发布的端口。至关重要的是,它还包括底层镜像:如果您有一个新的应用程序版本,或者需要更新底层操作系统发行版以解决安全问题,您将被迫删除并重新创建您的容器。根据我的经验,docker rm 是非常常规的,你应该计划它定期发生。

关于c# - 环境变量更改时重新加载配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54411883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com