Я пытаюсь определить среду, чтобы я знал, из какого файла appsettings.json нужно читать.
Ниже приведен код, который, по мнению Google, кажется приемлемым способом достижения этой цели.(Я более чем счастлив рассмотреть другие способы сделать это, если есть более эффективные способы ???):
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", EnvironmentVariableTarget.Machine);
Console.WriteLine($"Environment: {environmentName}");
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{environmentName}.json", false, true)
.AddEnvironmentVariables();
_configuration = builder.Build();
Вышеприведенное прекрасно работает при локальном запуске, получая значение из системных переменных:
Однако, если я запускаю приложение в контейнере Docker, environmentName
пусто.
Как установить переменные средыв докере?
Я пробовал несколько способов добиться этого, но ни один из них не дал желаемого эффекта:
В моем докер-файле у меня было:
ENTRYPOINT ["dotnet", "out/myapp.dll","--environment=test"]
Я такжепопытался передать его в качестве параметра при запуске контейнера:
docker run -e ASPNETCORE_ENVIRONMENT=test --rm dotnetapp-dev
В моем последнем примере выше я заметил, что могу получить параметр, вызвав этот код, ПОСЛЕ того как я создал конфигурацию, но она слишкомпоздно там - мне нужно перед звонком Build()
:
_configuration = builder.Build();
Console.WriteLine(_configuration["ASPNETCORE_ENVIRONMENT"]);//this works
Кому-нибудь удалось добиться установки системных переменных в контейнере Docker?