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#
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"]
In der Datei docker-compose.override.yml sollten Sie Folgendes finden:
version: '3.4'
services:
webapplication1:
environment:
- ASPNETCORE_ENVIRONMENT=Development # <==
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.
Wenn Sie die Docker-Integration für Visual Studio verwenden (Debug-Container aus VS), müssen Sie die Standardeinstellungen besonders beachten.
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 .
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"
}
}
}
}