기본 ASP.NET Core 포트가 80에서 8080으로 변경됨.

.NET 컨테이너 이미지에 구성된 기본 ASP.NET Core 포트가 포트 80에서 8080으로 업데이트되었습니다.

또한 ASPNETCORE_URLS에 대한 더 간단한 대안으로 새 ASPNETCORE_HTTP_PORTS 환경 변수를 추가했습니다. 새 변수에는 세미콜론으로 구분된 포트 번호 목록이 필요하지만 이전 변수에는 더 복잡한 구문이 필요합니다.

이전 WebHost.CreateDefaultBuilder() API를 사용하여 빌드된 앱은 새로운 ASPNETCORE_HTTP_PORTS 환경 변수를 따르지 않습니다. 이제 ASPNETCORE_URLS는 더 이상 자동으로 설정되지 않으므로 이전과 같이 http://*:80 대신 http://localhost:5000의 기본 URL을 사용하도록 전환됩니다.

이전 동작

.NET 8 이전에는 포트 80을 기본 포트로 예상하고 실행 중인 앱에 액세스할 수 있는 컨테이너를 실행할 수 있었습니다.

예를 들어, 다음 명령을 실행하면 컨테이너의 포트 80에 매핑된 포트 8000에서 로컬로 앱에 액세스할 수 있습니다.

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

새 동작

.NET 8부터 컨테이너에 사용되는 ASP.NET Core 포트를 80으로 명시적으로 설정하지 않고 컨테이너의 포트 80에 매핑하면 해당 매핑된 포트에 연결하려는 모든 시도가 실패합니다.

예를 들어, 다음 명령을 실행하면 포트 8000을 사용하여 로컬로 애플리케이션에 연결할 수 없습니다.

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

대신 컨테이너 내에서 포트 8080을 사용하도록 명령을 변경합니다.

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

다음 예에서 동작의 차이를 확인할 수 있습니다.

포트 80 매핑(실패 사례):

$ 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

포트 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

포트 80으로 설정된 ASPNETCORE_HTTP_PORTS를 사용하여 포트 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

Kubernetes 또는 Docker Compose를 사용하는 경우 해당 스키마에 따라 포트를 변경해야 합니다. 예를 보려면 Kubernetes에서 .NET 사용을 참조하세요.

도입된 버전

.NET 8 미리 보기 1

변경 형식

이 변경 사항은 동작 변경입니다.

변경 이유

non-root 사용자로 전환할 때 좋은 사용성 환경을 제공해야 하기 때문에 포트 번호가 변경되었습니다. non-root 사용자로 실행하려면 일부 환경에서 권한이 없는 포트를 사용해야 합니다. 이전 기본 포트인 80번 포트는 권한이 있는 포트이므로 기본 포트가 비권한 있는 포트인 포트 8080으로 업데이트되었습니다.

이러한 호환성이 손상되는 변경에 대응하는 방법에는 두 가지가 있습니다.

  • 권장 사항: ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTSASPNETCORE_URLS 환경 변수를 원하는 포트로 명시적으로 설정합니다. 예: docker run --rm -it -p 9999:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
  • 대신 포트 8080을 참조하도록 예상 기본 포트인 포트 80을 사용하는 기존 명령 및 구성을 업데이트합니다. 예: docker run --rm -it -p 9999:8080 <my-app>

이전 WebHost.CreateDefaultBuilder() 메서드를 사용하여 앱을 빌드한 경우 ASPNETCORE_URLS(ASPNETCORE_HTTP_PORTS 아님)를 설정합니다. 예: docker run --rm -it -p 9999:80 -e ASPNETCORE_URLS=http://*:80 <my-app>

영향을 받는 API

없음

참고 항목