既定の ASP.NET Core ポートが 80 から 8080 に変更されました
.NET コンテナー イメージで構成された既定の ASP.NET Core ポートが、ポート 80 から 8080 に更新されました。
また、新しい ASPNETCORE_HTTP_PORTS
の環境変数を、ASPNETCORE_URLS
の代替となる、よりシンプルな環境変数として追加しました。 新しい変数では、ポート番号のセミコロン区切りのリストが必要となりますが、古い方の変数ではより複雑な構文が必要です。
古い 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
導入されたバージョン
.NET 8 Preview 1
変更の種類
この変更は、動作変更です。
変更理由
ポート番号の変更は、non-root
ユーザーに切り替えるときに使いやすいエクスペリエンスを提供する必要があるために行われました。 一部の環境では、non-root
ユーザーとして実行するには、非特権ポートを使用する必要があります。 以前の既定のポートであるポート 80 は特権ポートであるため、既定値が非特権ポートであるポート 8080 に更新されました。
推奨される操作
この破壊的変更に対応するには、次の 2 つの方法があります。
- (推奨するアクション)
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_HTTP_PORTS
ではなく) ASPNETCORE_URLS
を設定してください。 例: docker run --rm -it -p 8000:80 -e ASPNETCORE_URLS=http://*:80 <my-app>
。
Kubernetes または Docker Compose を使用している場合は、これらのスキーマごとにポートを変更する必要があります。 変更の例は、「Kubernetes での .NET の使用」に関する記事をご覧ください。
Azure コンテナー サービスを使用して ASP.NET Core コンテナー アプリをホストする場合は、目的のポートを設定するようにコンテナー環境を更新する必要があります。
- Azure App Service の場合は、CLI を使用するかポータル内で
WEBSITES_PORT
を設定します。 - Azure Container Apps の場合、リソースの作成の一環としてポートを変更できます。
- Azure Container Instances の場合、リソースの作成の一環としてポートを変更できます。
影響を受ける API
[なし] :
関連項目
.NET