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#
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"]
Dans le fichier docker-compose.override.yml, vous devriez trouver quelque chose comme ça:
version: '3.4'
services:
webapplication1:
environment:
- ASPNETCORE_ENVIRONMENT=Development # <==
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.