Поделиться через


По умолчанию ASP.NET основной порт изменился с 80 по 8080

Порт по умолчанию ASP.NET Core, настроенный в образах контейнеров .NET, обновлен с порта 80 до 8080.

Мы также добавили новую ASPNETCORE_HTTP_PORTS переменную среды в качестве более простой альтернативы ASPNETCORE_URLS. Новая переменная ожидает список номеров портов с запятой, а старая переменная ожидает более сложный синтаксис.

Приложения, созданные с помощью старого WebHost.CreateDefaultBuilder() API, не уважают новую ASPNETCORE_HTTP_PORTS переменную среды. И теперь, когда ASPNETCORE_URLS больше не настроен автоматически, они переключатся на использование URL-адреса http://localhost:5000 по умолчанию, а не http://*:80 как раньше.

Прежнее поведение

До .NET 8 можно запустить контейнер, который ожидал, что порт 80 будет портом по умолчанию и иметь доступ к работающему приложению.

Например, можно выполнить следующую команду, а затем получить доступ к приложению локально через порт 8000, сопоставленный с портом 80 в контейнере:

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

Новое поведение

Начиная с .NET 8, если вы сопоставляете порт 80 в контейнере, не устанавливая явно порт ASP.NET Core, используемый в контейнере, равным 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

Представленные версии

.NET 8( предварительная версия 1)

Тип изменения

Это изменение поведения.

Причина изменения

Изменение номера порта было сделано из-за необходимости обеспечить хорошее удобство использования при переключении на non-root пользователя. Запуск от имени non-root пользователя требует использования не привилегированного порта в некоторых средах. Так как порт 80, предыдущий порт по умолчанию является привилегированным портом, значение по умолчанию было обновлено до порта 8080, который является не привилегированным портом.

Существует два способа реагирования на это критическое изменение:

  • (Рекомендуемое действие) Помимо использования некорневого app пользователя, явно задайте переменные среды ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS, и ASPNETCORE_URLS на желаемый порт. Пример: docker run --rm -it -p 8000:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
  • Обновите существующие команды и конфигурацию, которые используют ожидаемый порт по умолчанию порта 80, чтобы ссылаться на порт 8080. Пример: docker run --rm -it -p 8000:8080 <my-app>

Если приложение было создано с помощью старого WebHost.CreateDefaultBuilder() метода, задайте ASPNETCORE_URLS (не ASPNETCORE_HTTP_PORTS). Пример: docker run --rm -it -p 8000:80 -e ASPNETCORE_URLS=http://*:80 <my-app>.

Если вы используете Kubernetes или Docker Compose, необходимо изменить порт на эти схемы. Примеры см. в статье "Использование .NET с Kubernetes".

Если вы используете службы контейнеров Azure для размещения приложения контейнера ASP.NET Core, необходимо обновить среду контейнера, чтобы задать нужный порт:

Затронутые API

Нет.

См. также