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


По умолчанию 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, который является не привилегированным портом.

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

  • (Рекомендуемое действие) Явным образом задайте ASPNETCORE_HTTP_PORTSASPNETCORE_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, необходимо обновить среду контейнера, чтобы задать нужный порт:

  • Для службы приложение Azure задайте WEBSITES_PORTинтерфейс командной строки или на портале.
  • Для приложений контейнеров Azure можно изменить порт как часть создания ресурсов.
  • Для Экземпляры контейнеров Azure можно изменить порт как часть создания ресурса.

Затронутые API

Нет.

См. также