web-dev-qa-db-ja.com

docker環境変数を.netコアに渡す

私はこれに従いました articlegithub のコードはコンパイルされません、チュートリアルは古いと思います。 (Configuration = builder.Build();)はエラーをスローします。では、どうやってdockerから渡されたenvにアクセスできますか?


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
AppDeveloper

ビルド引数で環境変数を渡すことができます。例えば。

--build-arg ASPNETCORE_ENVIRONMENT =開発

以下の変数を使用して値を設定します。

ASPNETCORE_ENVIRONMENT

コード:

var environmentName = Environment.GetEnvironmentVariable( "ASPNETCORE_ENVIRONMENT");

上記の変数を環境名のコードで使用できます。

2
Rahul Chavan

.NET Coreアプリケーションで環境変数にアクセスする標準的な方法は、静的メソッドを使用することです

public static string GetEnvironmentVariable (string variable);

そのため、あなたのケースでは、docker runコマンドまたは起動設定ファイルで何を渡したかに関係なく、このメソッドを使用してください。データベースのパスワードを取得するための例として、これを使用します

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

さらに、次の行を追加して、dockerfileの環境変数部分を必ず定義してください

ENV DATABASE_PASSWORD some_default_value_or_can_be_empty
6
goodbye_for_now