Standardport ASP.NET Core von 80 in 8080 geändert
Der in .NET-Containerimages konfigurierte Standardport für ASP.NET Core wurde von Port 80 in 8080 geändert.
Außerdem wurde die neue ASPNETCORE_HTTP_PORTS
-Umgebungsvariable als einfachere Alternative zu ASPNETCORE_URLS
hinzugefügt. Die neue Variable erwartet eine durch Semikolons getrennte Liste der Portnummern, während die ältere Variable eine kompliziertere Syntax erwartet.
Apps, die mit der älteren WebHost.CreateDefaultBuilder()-API erstellt wurden, werden die neue ASPNETCORE_HTTP_PORTS
-Umgebungsvariable nicht respektieren. Und jetzt, da ASPNETCORE_URLS
nicht mehr automatisch festgelegt wird, wechseln sie zur Verwendung einer Standard-URL von http://localhost:5000
statt wie bisher http://*:80
.
Vorheriges Verhalten
Vor .NET 8 konnten Sie einen Container ausführen und davon ausgehen, dass Port 80 der Standardport ist und Sie auf die ausgeführte App zugreifen können.
Sie konnten beispielsweise den folgenden Befehl ausführen und dann lokal über Port 8000 auf die App zugreifen, da er im Container Port 80 zugeordnet ist:
docker run --rm -it -p 8000:80 <my-app>
Neues Verhalten
Ab .NET 8 schlägt jeder Versuch, eine Verbindung mit diesem Port herzustellen, fehl, wenn Sie Port 80 im Container zuordnen, ohne den Port für ASP.NET Core im Container explizit auf 80 festzulegen.
Wenn Sie beispielsweise den folgenden Befehl ausführen, können Sie über Port 8000 keine lokale Verbindung mit der Anwendung herstellen.
docker run --rm -it -p 8000:80 <my-app>
Ändern Sie stattdessen den Befehl, sodass im Container Port 8080 verwendet wird:
docker run --rm -it -p 8000:8080 <my-app>
In den folgenden Beispielen können Sie den Unterschied im Verhalten sehen.
Zuordnung von Port 80
(Fehlerfall):
$ docker run --rm -d -p 8000:80 mcr.microsoft.com/dotnet/samples:aspnetapp
ba88b746bd7097e503f8ab6e5320c595640e242f6de4f734412944a0e2836acc
$ curl http://localhost:8000/Environment
curl: (56) Recv failure: Connection reset by peer
$ docker kill ba88b746bd7097e503f8ab6e5320c595640e242f6de4f734412944a0e2836acc
ba88b746bd7097e503f8ab6e5320c595640e242f6de4f734412944a0e2836acc
Zuordnung von Port 8080
:
$ docker run --rm -d -p 8000:8080 mcr.microsoft.com/dotnet/samples:aspnetapp
74d866bdaa8a5a09e4a347bba17ced321d77a2524a0853294a123640bcc7f21d
$ curl http://localhost:8000/Environment
{"runtimeVersion":".NET 8.0.0-rc.1.23419.4","osVersion":"Alpine Linux v3.18","osArchitecture":"Arm64","user":"root","processorCount":4,"totalAvailableMemoryBytes":4123820032,"memoryLimit":0,"memoryUsage":30081024,"hostName":"74d866bdaa8a"}
$ docker kill 74d866bdaa8a5a09e4a347bba17ced321d77a2524a0853294a123640bcc7f21d
74d866bdaa8a5a09e4a347bba17ced321d77a2524a0853294a123640bcc7f21d
Zuordnung von Port 80
, wobei ASPNETCORE_HTTP_PORTS
auf Port 80
festgelegt ist:
$ docker run --rm -d -p 8000:80 -e ASPNETCORE_HTTP_PORTS=80 mcr.microsoft.com/dotnet/samples:aspnetapp
3cc86b4b3ea1a7303d83171c132b0645d4adf61d80131152936b01661ae82a09
$ curl http://localhost:8000/Environment
{"runtimeVersion":".NET 8.0.0-rc.1.23419.4","osVersion":"Alpine Linux v3.18","osArchitecture":"Arm64","user":"root","processorCount":4,"totalAvailableMemoryBytes":4123820032,"memoryLimit":0,"memoryUsage":95383552,"hostName":"3cc86b4b3ea1"}
$ docker kill 3cc86b4b3ea1a7303d83171c132b0645d4adf61d80131152936b01661ae82a09
3cc86b4b3ea1a7303d83171c132b0645d4adf61d80131152936b01661ae82a09
Eingeführt in Version
.NET 8 Preview 1
Art der Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Die Änderung der Portnummer wurde vorgenommen, weil eine gute Benutzerfreundlichkeit beim Wechsel zu einem non-root
-Benutzer zu gewährleisten. Die Ausführung als non-root
-Benutzer erfordert in einigen Umgebungen die Verwendung eines nicht privilegierten Ports. Da Port 80, der vorherige Standardport, ein privilegierter Port ist, wurde der Standardwert in Port 8080 geändert, weil dies ein nicht privilegierter Port ist.
Empfohlene Maßnahme
Es gibt zwei Möglichkeiten, auf diese wichtige Änderung zu reagieren:
- (Empfohlene Aktion:) Legen Sie die Umgebungsvariablen
ASPNETCORE_HTTP_PORTS
,ASPNETCORE_HTTPS_PORTS
undASPNETCORE_URLS
explizit auf den gewünschten Port fest. Beispiel:docker run --rm -it -p 8000:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
- Aktualisieren Sie vorhandene Befehle und Konfigurationen, die sich auf den erwarteten Standardport 80 beziehen, sodass stattdessen Port 8080 verwendet wird. Beispiel:
docker run --rm -it -p 8000:8080 <my-app>
Wenn Ihre App mit der älteren WebHost.CreateDefaultBuilder()-Methode erstellt wurde, legen Sie ASPNETCORE_URLS
fest (nicht ASPNETCORE_HTTP_PORTS
). Beispiel: docker run --rm -it -p 8000:80 -e ASPNETCORE_URLS=http://*:80 <my-app>
.
Wenn Sie Kubernetes oder Docker Compose verwenden, müssen Sie den Port für diese Schemas ändern. Beispiele finden Sie unter Verwenden von .NET mit Kubernetes.
Wenn Sie Azure Container Service zum Hosten Ihrer ASP.NET Core-Container-App verwenden, müssen Sie Ihre Containerumgebung aktualisieren, um den gewünschten Port festzulegen:
- Legen Sie für Azure App Service
WEBSITES_PORT
über die Befehlszeilenschnittstelle oder das Portal fest. - Für Azure Container Apps können Sie den Port während der Ressourcenerstellung ändern.
- Für Azure Container Instances können Sie den Port während der Ressourcenerstellung ändern.
Betroffene APIs
Keine.