передача переменных среды докера в ядро ​​.net - PullRequest
1 голос
/ 10 октября 2019

Я следовал этой статье , и код на github не компилируется, учебник устарел, я думаю. (Configuration = builder.Build();) выдает ошибку. Так как я могу получить доступ к env, переданному из docker?


docker-compose

  myproj:
    image: mcr.microsoft.com/dotnet/core/sdk:2.2
    restart: on-failure
    working_dir: /MyProj
    command: bash -c "dotnet build MyProj.csproj && dotnet bin/Debug/netcoreapp2.2/MyProj.dll"
    ports:
      - 5001:5001
      - 5000:5000
    volumes:
      - "./MyProj:/MyProj"
    environment:
      DATABASE_HOST: database
      DATABASE_PASSWORD: Password

Startup.cs

public Service()
{
    Environment.GetEnvironmentVariable("DATABASE_PASSWORD"); // null
}

// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        context.Response.WriteAsync("Hello World!");
    });
}

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

Вы можете передать переменную env в аргументе сборки. Например,

- build-arg ASPNETCORE_ENVIRONMENT = Разработка

Используйте значение переменной ниже для установки значения:

ASPNETCORE_ENVIRONMENT

Код:

varenvironmentName = Environment.GetEnvironmentVariable ("ASPNETCORE_ENVIRONMENT");

Вы можете использовать вышеуказанную переменную в своем коде для имени среды.

2 голосов
/ 10 октября 2019

Стандартный подход для доступа к переменным среды в приложении .NET Core заключается в использовании статического метода

public static string GetEnvironmentVariable (string variable);

Так что в вашем случае, независимо от того, что вы передаете либо в команде запуска docker, либо через запускФайл настроек просто используйте этот метод. В качестве примера для получения пароля базы данных используйте это

string dbPassword = Environment.GetEnvironmentVariable("DATABASE_PASSWORD");

. Кроме того, обязательно определите часть переменных среды файла dockerfile, добавив строку

ENV DATABASE_PASSWORD some_default_value_or_can_be_empty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...