Domyślny port ASP.NET Core został zmieniony z 80 na 8080

Domyślny port ASP.NET Core skonfigurowany w obrazach kontenerów platformy .NET został zaktualizowany z portu 80 do 8080.

Dodaliśmy również nową ASPNETCORE_HTTP_PORTS zmienną środowiskową jako prostszą alternatywę dla ASPNETCORE_URLSelementu . Nowa zmienna oczekuje rozdzielanej średnikami listy numerów portów, podczas gdy starsza zmienna oczekuje bardziej skomplikowanej składni.

Aplikacje utworzone przy użyciu starszego WebHost.CreateDefaultBuilder() interfejsu API nie będą uwzględniać nowej ASPNETCORE_HTTP_PORTS zmiennej środowiskowej. A teraz, gdy ASPNETCORE_URLS nie jest już ustawiany automatycznie, przełączą się, aby użyć domyślnego http://localhost:5000adresu URL , a nie http://*:80, jak poprzednio.

Poprzednie zachowanie

Przed platformą .NET 8 można uruchomić kontener, który oczekiwał portu 80 jako portu domyślnego i mieć dostęp do uruchomionej aplikacji.

Można na przykład uruchomić następujące polecenie, a następnie uzyskać dostęp do aplikacji lokalnie na porcie 8000, który jest mapowany na port 80 w kontenerze:

docker run --rm -it -p 8000:80 <my-app>

Nowe zachowanie

Począwszy od platformy .NET 8, jeśli mapujesz port 80 w kontenerze bez jawnego ustawienia portu ASP.NET Core używanego w kontenerze na 80, próba nawiązania połączenia z tym zamapowanym portem zakończy się niepowodzeniem.

Jeśli na przykład uruchomisz następujące polecenie, nie będzie można nawiązać połączenia z aplikacją lokalnie przy użyciu portu 8000.

docker run --rm -it -p 8000:80 <my-app>

Zamiast tego zmień polecenie tak, aby używało portu 8080 w kontenerze:

docker run --rm -it -p 8000:8080 <my-app>

Różnicę w zachowaniu można zobaczyć w poniższych przykładach.

Port 80 mapowania (przypadek awarii):

$ 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

Port 8080mapowania:

$ 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

Mapowanie portu 80 z ustawionym ASPNETCORE_HTTP_PORTS na port 80:

$ 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

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 1)

Typ zmiany

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Zmiana numeru portu została wprowadzona z powodu potrzeby zapewnienia dobrego środowiska użyteczności podczas przełączania się do non-root użytkownika. Uruchamianie jako non-root użytkownik wymaga użycia portu bez uprawnień w niektórych środowiskach. Ponieważ port 80, poprzedni port domyślny, jest portem uprzywilejowanym, wartość domyślna została zaktualizowana do portu 8080, który jest portem nieuprzywilejowanym.

Istnieją dwa sposoby reagowania na tę zmianę powodującą niezgodność:

  • (Zalecana akcja) Jawnie ustaw ASPNETCORE_HTTP_PORTSzmienne środowiskowe , ASPNETCORE_HTTPS_PORTSi ASPNETCORE_URLS na żądany port. Przykład: docker run --rm -it -p 8000:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
  • Zaktualizuj istniejące polecenia i konfigurację, które polegają na oczekiwanym domyślnym porcie 80, aby odwoływać się do portu 8080. Przykład: docker run --rm -it -p 8000:8080 <my-app>

Jeśli aplikacja została skompilowana przy użyciu starszej WebHost.CreateDefaultBuilder() metody, ustaw wartość ASPNETCORE_URLS (nie ASPNETCORE_HTTP_PORTS). Przykład: docker run --rm -it -p 8000:80 -e ASPNETCORE_URLS=http://*:80 <my-app>.

Jeśli używasz platformy Kubernetes lub narzędzia Docker Compose, musisz zmienić port dla tych schematów. Przykłady można znaleźć w temacie Using .NET with Kubernetes (Używanie platformy .NET z platformą Kubernetes).

Jeśli używasz usług kontenerów platformy Azure do hostowania aplikacji kontenera ASP.NET Core, musisz zaktualizować środowisko kontenera, aby ustawić żądany port:

  • W przypadku usługi aplikacja systemu Azure ustaw wartość WEBSITES_PORTprzy użyciu interfejsu wiersza polecenia lub w portalu.
  • W przypadku usługi Azure Container Apps możesz zmienić port w ramach tworzenia zasobów.
  • W przypadku usługi Azure Container Instances możesz zmienić port w ramach tworzenia zasobów.

Dotyczy interfejsów API

Brak.

Zobacz też