Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Domyślny port ASP.NET Core skonfigurowany w obrazach kontenerów platformy .NET został zaktualizowany z portu 80 na 8080.
Dodaliśmy również nową ASPNETCORE_HTTP_PORTS
zmienną środowiskową jako prostszą alternatywę dla ASPNETCORE_URLS
elementu . 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, zmienią na użycie domyślnego adresu URL http://localhost:5000
, 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.
Mapowanie portu 80
(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
Mapowanie portu 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
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 doświadczenia użytkownika podczas przełączania się do non-root
użytkownika. Uruchamianie jako non-root
użytkownik wymaga użycia nieuprzywilejowanego portu 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.
Zalecana akcja
Istnieją dwa sposoby reagowania na tę zmianę powodującą niezgodność:
- (Zalecana akcja) Oprócz używania użytkownika niebędącego użytkownikiem głównym
app
jawnie ustawASPNETCORE_HTTP_PORTS
zmienne środowiskowe ,ASPNETCORE_HTTPS_PORTS
iASPNETCORE_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, tak, aby odwoływały 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 Kubernetes lub Docker Compose, musisz zmienić port zgodnie z ich konfiguracjami. 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_PORT
przy 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ż
- Nowy użytkownik 'app' niebędący rootem w obrazach systemu Linux
- Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish
- Blog: Zabezpieczanie aplikacji w chmurze .NET za pomocą bezkorennych kontenerów Linuksa
- Blog: uruchamianie kontenerów platformy .NET innych niż główne za pomocą platformy Kubernetes