wake-up-neo.com

ASPNETCORE_ENVIRONMENT in Docker

ich habe Probleme beim Einstellen der Variablen ASPNETCORE_ENVIRONMENT, die mein Projekt in einem docker-Container ausführen. Das Problem ist, dass der Wert immer set/überschrieben wird in "Entwicklung".

Ich habe versucht, die Umgebungsvariable in meiner Dockerfile mit einzustellen 

ENV ASPNETCORE_ENVIRONMENT test

auch habe ich versucht, die Umgebungsvariable in meiner docker-compose -Datei zu setzen 

environment:
      - ASPNETCORE_ENVIRONMENT=test

Wenn ich eine andere Umgebungsvariable setze, funktioniert es, zum Beispiel:

environment:
      - OTHER_TEST_VARIABLE=test

Ich gehe davon aus, dass der Wert für die Variable ASPNETCORE_ENVIRONMENT irgendwo überschrieben wird, aber ich habe Schwierigkeiten, wo herauszufinden.

Ich habe die Docker-Unterstützung zu einem vorhandenen Projekt hinzugefügt und führe das Projekt direkt über die Docker/Docker-Compose-Option von Visual Studio aus 

Das Projekt läuft auf Asp Net Core 2.1

Danke im Voraus

Meine 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"

    }

  }
}

Ich habe auch versucht, die Umgebungsvariablenkonfiguration zu launchSettings.json hinzuzufügen

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

Mein Webhost:

 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();

        }

Mein docker-compose.yml

version: '3.4'

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

Meine 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"]

Hier ist eine Liste der Umgebungsvariablen im Container

C:\Users\Administrator>docker exec -ti d6 /bin/bash
[email protected]:/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
[email protected]:/app#
6
Aaron

Es funktioniert für mich, indem Sie ASPNETCORE_ENVIRONMENT mit dem Befehl dotnet CoreDocker.dll --environment="X" konfigurieren. 

Versuchen Sie, dockerfile wie folgt zu ändern: 

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

4
Tao Zhou

In der Datei docker-compose.override.yml sollten Sie Folgendes finden:

version: '3.4'

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

Vielen Dank für Ihre Kommentare, ich habe mein Problem gelöst. Es war nur mein Fehler.

Mein Problem war, als ich meinem Projekt Docker-Support hinzufügte, hatte ich bereits eine Docker-Datei im Projekt. 

Als VS Dateien für die Docker-Unterstützung generierte, wurde eine zweite Docker-Datei erstellt und eine der Docker-Dateien wurde in "Dockerfile.original" umbenannt.

Ich habe die im Lösungs-Explorer sichtbare "Dockerfile" verwendet (die irgendwie der "Dockerfile.original" -Datei im Dateisystem zugeordnet wurde).

Es scheint, dass meine Änderungen im Hintergrund in "Dockerfile.original" geschrieben wurden, diese Datei jedoch nicht verwendet wurde, während Docker-Compose ausgeführt wurde. Es wurde die leere generierte Docker-Datei verwendet, die im Projektmappen-Explorer nicht sichtbar war.

0
Aaron

Visual Studio Docker-Tooling

Wenn Sie die Docker-Integration für Visual Studio verwenden (Debug-Container aus VS), müssen Sie die Standardeinstellungen besonders beachten.

Standardumgebungsvariablen

Wenn das Tool den Debugger mit einem docker run [..] - Befehl startet, liefert es ein -e "ASPNETCORE_ENVIRONMENT=Development" - Argument. Diese Umgebungsvariable können Sie im Properties/launchSettings.json Überschreiben.

Obwohl ich es im ausgegebenen Befehl nicht sehen kann, habe ich bei meinen Tests auch eine andere Standardvariable ASPNETCORE_URLS=http://+:80 Festgestellt.

Ein guter Ausgangspunkt zum Lesen von VS Docker Tooling ist dieser Blog-Beitrag und offizielle Dokumentation .

Allgemeiner .Net-Core 3.0-Host

Wenn Sie den generischen Host in .Net-Core 3.0 verwenden, können Probleme auftreten, wenn Sie die neue generische Variable DOTNET_ENVIRONMENT Verwenden, da dann zwei Umgebungen angegeben werden. Dies kann schwierig zu debuggen sein. Also, was ich gerne mache, ist zunächst alle Standardeinstellungen aufzuheben und in meinem Properties/launchSettings.json Neu zu beginnen:

{
  "$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