web-dev-qa-db-ja.com

DockerのASPNETCORE_ENVIRONMENT

ASPNETCORE_ENVIRONMENT変数を設定する際に問題が発生しましたdocker containerでプロジェクトを実行しています。問題は、値が常に「開発」に設定/上書きされるであることです。

Dockerfileで環境変数を設定しようとしました

ENV ASPNETCORE_ENVIRONMENT test

私のdocker-composeファイルに環境変数を設定しようとしました

environment:
      - ASPNETCORE_ENVIRONMENT=test

他の環境変数を設定すると動作します、例えば:

environment:
      - OTHER_TEST_VARIABLE=test

ASPNETCORE_ENVIRONMENT変数の値はどこかで上書きされると思いますが、どこを見つけるのが難しいかわかりません。

既存のプロジェクトにDockerサポートを追加し、Visual StudioのDocker/Docker作成オプションを介してプロジェクトを直接実行しています

プロジェクトはAsp Net Core 2.1で実行されます

前もって感謝します

私のlaunchSettings.json:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:53183/",
      "sslPort": 0
    }
  },
  "profiles": {

    "Docker": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values"

    }

  }
}

また、環境変数設定をlaunchSettings.jsonに追加してみました

"Docker": {
          "commandName": "Docker",
          "launchBrowser": true,
          "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values",
          "environmentVariables": {
           "ASPNETCORE_ENVIRONMENT": "test"
      }
        }

私のウェブホスト:

 public static IWebHost BuildWebHost(string[] args)
        {
           return WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((builderContext,config) =>
                {
                    config.AddEnvironmentVariables();
                })
                .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                    logging.AddDebug();
                })
                .UseStartup<Startup>()
                .Build();

        }

私のdocker-compose.yml

version: '3.4'

services:
  api:
    image: ${DOCKER_REGISTRY}api
    build:
      context: .
      dockerfile: API/Dockerfile
    environment:
     - ASPNETCORE_ENVIRONMENT=test 

私のDockerfile:

FROM Microsoft/dotnet:2.1-aspnetcore-runtime AS base

WORKDIR /app
EXPOSE 80
FROM Microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY API/API.csproj API/
RUN dotnet restore API/API.csproj
COPY . .
WORKDIR /src/API
RUN dotnet build API.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish API.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .


ENTRYPOINT ["dotnet", "API.dll"]

以下は、コンテナ内の環境変数のリストです

C:\Users\Administrator>docker exec -ti d6 /bin/bash
root@d6f26d2ed2c3:/app# printenv
HOSTNAME=d6f26d2ed2c3
ASPNETCORE_URLS=http://+:80
test1=asdasd
test2=dasdasd
test3=dasdasd
PWD=/app
HOME=/root
NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages
DOTNET_USE_POLLING_FILE_WATCHER=1
ASPNETCORE_VERSION=2.1.3
DOTNET_RUNNING_IN_CONTAINER=true
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ASPNETCORE_ENVIRONMENT=Development
_=/usr/bin/printenv
root@d6f26d2ed2c3:/app#
17
Aaron

コマンドASPNETCORE_ENVIRONMENTdotnet CoreDocker.dll --environment="X"を構成することで機能します

以下のようにdockerfileを変更してください:

ENTRYPOINT ["dotnet", "CoreDocker.dll", "--environment=X"]

11
Tao Zhou

Docker-compose.override.ymlファイルには、次のようなものがあります。

version: '3.4'

services:
  webapplication1:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development # <==
8
Hani Amr

あなたのコメントをありがとう、私は私の問題を解決しました。それは私の間違いでした。

私の問題は、プロジェクトにDocker-Supportを追加したときに、プロジェクトにDockerfileがすでに含まれていることでした。

VSがDockerサポート用のファイルを生成すると、2番目のDockerfileが作成され、Dockerfilesの1つが「Dockerfile.original」に名前が変更されました。

ソリューションエクスプローラーに表示される「Dockerfile」を使用していました(ファイルシステムの「Dockerfile.original」ファイルに何らかの方法でマップされていました)

バックグラウンドで私の変更は「Dockerfile.original」に書き込まれますが、このファイルはdocker-composeの実行中は使用されなかったようです。ソリューションエクスプローラーに表示されない空の生成されたDockerfileを使用しました。

2
Aaron

Visual Studio Dockerツール

Visual StudioのDocker統合(VS内からのデバッグコンテナー)を使用する場合は、デフォルトに特別な注意を払う必要があります。

デフォルトの環境変数

ツールがdocker run [..]コマンドを使用してデバッガーを開始するとき、-e "ASPNETCORE_ENVIRONMENT=Development"引数を提供します。 Properties/launchSettings.jsonでこの環境変数を上書きできます。

発行されたコマンドでは表示されませんが、テストでは別のデフォルト変数ASPNETCORE_URLS=http://+:80も発生しました。

VS Docker Toolingについて読むのに適した出発点は、 このブログ投稿公式ドキュメント です。

.Net-Core 3.0汎用ホスト

.Net-Core 3.0でジェネリックホストを使用する場合、新しいジェネリックDOTNET_ENVIRONMENT変数を使用すると、2つの環境が指定されるため、問題が発生する可能性があります。これはデバッグが難しい場合があります。だから私がしたいのは、最初にすべてのデフォルトを設定解除し、Properties/launchSettings.jsonで新しく開始することです:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "Docker": {
      "commandName": "Docker",
      "environmentVariables": {
        // Overwrite default VS Docker Tools environment variables first (ASPNETCORE_ENVIRONMENT=Development; ASPNETCORE_URLS=http://+:80)
        // https://www.paraesthesia.com/archive/2019/06/18/tips-on-container-tools-for-visual-studio/
        "ASPNETCORE_ENVIRONMENT": "",
        "ASPNETCORE_URLS": "",
        "DOTNET_ENVIRONMENT": "Production",
        "DOTNET_URLS": "http://+:80"
      }
    }
  }
}
0
Bruno Zell