Какой URL-адрес Kestrel должен прослушивать в Docker-контейнере в Службе приложений Azure

У меня есть ASP.NET Core в Docker-контейнере, который будет размещен в Службе приложений Azure. Какой URL-адрес должен прослушивать Kestrel, находящийся внутри контейнера, при развертывании в Службе приложений Azure?

Моя мысленная модель такова: я мог бы использовать localhost:8080, а затем привязать порт контейнера 8080 к порту 443 службы приложений Azure через -p 443:8080. Поэтому при посещении https://myapp.azurewebsites.net этот номер 443 будет перенаправлен на номер 8080, который слушает Kestrel.

Так как же правильно поступить? Спасибо. Я самоучка и имею лишь самые базовые знания в области сетевых технологий, поэтому, пожалуйста, объясните, как будто мне 5 лет, и дайте ключевые слова, чтобы я мог исследовать больше. Спасибо


50
1

Ответ:

Решено

Вы обязательно захотите привязаться к (так оно называется) 0.0.0.0. Он определяет, откуда вы будете принимать соединения. В контейнере localhost — это сам контейнер, поэтому, если вы привязываетесь к localhost, ваше приложение будет принимать соединения, поступающие только изнутри контейнера. Это не то, чего вы хотите.

Что касается того, какой порт использовать внутри контейнера, это не имеет особого значения, поскольку вы сопоставите его с портом хоста при запуске контейнера. Образы aspnet от Microsoft настроены на прием HTTP-трафика через порт 8080 для .NET 8 и порт 80 для .NET 7 и более ранних версий.

Поскольку вы сопоставляете порт хоста 443, похоже, вы хотите использовать HTTPS, а не HTTP. Для этого вам необходимо настроить ASP, поскольку по умолчанию используется только HTTP. Вы можете настроить ASP, установив для переменной среды ASPNETCORE_URLS значение вроде https://+:8443. Затем он будет прослушивать HTTPS на порту 8443. Если вы это сделаете, я рекомендую прослушивать другой порт, кроме 8080, поскольку он обычно используется для HTTP-трафика.

Чтобы использовать HTTPS, вам также необходимо настроить сертификаты. Подробнее об этом можно прочитать здесь.

Краткий ответ: чтобы запустить контейнер .NET 8 aspnet, эта команда должна помочь:

docker run -d -p 8080:8080 -e ASPNETCORE_ENVIRONMENT=Development my-image

Если вы хотите, чтобы Swagger был доступен, для среды необходимо выбрать «Разработка». Swagger доступен только в среде разработки, и по умолчанию контейнер Docker не находится в стадии разработки.