В файле 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
) и установить новое значение переменной env
printenv Log__Type // -> value from docker-compose
export Log__Type=new value
printenv Log__Type // -> new value
, но мое приложение не перезагрузило конфигурациюи по-прежнему показывает тип журнала "значение из docker-compose".
Не могли бы вы посоветовать, как изменить настройки во время выполнения с помощью Docker?Или объясните, почему перезагрузка происходит только после изменения файла, но не переменной env.