Freigeben über


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_URLShinzugefü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.

Es gibt zwei Möglichkeiten, auf diese wichtige Änderung zu reagieren:

  • (Empfohlene Aktion:) Legen Sie die Umgebungsvariablen ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS und ASPNETCORE_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:

Betroffene APIs

Keine.

Siehe auch