web-dev-qa-db-fra.com

ASPNETCORE_ENVIRONMENT dans Docker

j'ai des problèmes pour configurer la variable ASPNETCORE_ENVIRONMENT qui exécute mon projet dans un conteneur docker . Le problème est que la valeur est toujours définie/remplacée par "Développement" .

J'ai essayé de définir la variable d'environnement dans mon Dockerfile using 

ENV ASPNETCORE_ENVIRONMENT test

également essayé de définir la variable d'environnement dans mon docker-compose fichier en utilisant 

environment:
      - ASPNETCORE_ENVIRONMENT=test

Lorsque je définis une autre variable d'environnement cela fonctionne , par exemple:

environment:
      - OTHER_TEST_VARIABLE=test

Je suppose que la valeur de ASPNETCORE_ENVIRONMENT variable est écrasée quelque part, mais j’ai du mal à savoir où.

J'ai ajouté la prise en charge de Docker à un projet existant et je l'exécute directement via l'option de composition Docker/Docker de Visual Studio. 

Le projet fonctionne sur Asp Net Core 2.1

Merci d'avance

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

    }

  }
}

J'ai aussi essayé d'ajouter la configuration de la variable d'environnement au launchSettings.json

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

Mon hébergeur:

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

        }

Mon docker-compose.yml

version: '3.4'

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

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

Voici une liste des variables d'environnement dans le conteneur

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#
6
Aaron

Cela fonctionne pour moi en configurant ASPNETCORE_ENVIRONMENT avec la commande dotnet CoreDocker.dll --environment="X" 

Essayez de changer dockerfile comme ci-dessous: 

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

4
Tao Zhou

Dans le fichier docker-compose.override.yml, vous devriez trouver quelque chose comme ça:

version: '3.4'

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

Merci pour vos commentaires, j'ai résolu mon problème. C'était juste mon erreur.

Mon problème était que lorsque j'ai ajouté Docker-Support à mon projet, un fichier Docker était déjà inclus dans le projet. 

Lorsque VS a généré des fichiers pour le support Docker, un deuxième fichier Docker a été créé et l’un des fichiers Docker a été renommé "Dockerfile.original".

J'utilisais le "Dockerfile" visible dans l'explorateur de la solution (qui était en quelque sorte mappé au fichier "Dockerfile.original" dans le système de fichiers)

Il semble qu'en arrière-plan, mes modifications ont été écrites dans "Dockerfile.original", mais ce fichier n'a pas été utilisé pendant la composition de docker. Il utilisait le fichier Dockerfile généré vide qui n'était pas visible dans l'explorateur de solutions.

0
Aaron