既定の 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

Kubernetes または Docker Compose を使用している場合は、これらのスキーマごとにポートを変更する必要があります。 「Kubernetes での .NET の使用」で、変更の例をご確認ください。

導入されたバージョン

.NET 8 Preview 1

変更の種類

この変更は、動作変更です。

変更理由

ポート番号の変更は、non-root ユーザーに切り替えるときに使いやすいエクスペリエンスを提供する必要があるために行われました。 一部の環境では、non-root ユーザーとして実行するには、非特権ポートを使用する必要があります。 以前の既定のポートであるポート 80 は特権ポートであるため、既定値が非特権ポートであるポート 8080 に更新されました。

この破壊的変更に対応するには、次の 2 つの方法があります。

  • 推奨: ASPNETCORE_HTTP_PORTSASPNETCORE_HTTPS_PORTSASPNETCORE_URLS 環境変数を、目的のポートに明示的に設定します。 例: docker run --rm -it -p 9999:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
  • 必要な既定のポートとしてポート 80 に依存する既存のコマンドと構成を、代わりにポート 8080 を参照するように更新します。 例: docker run --rm -it -p 9999:8080 <my-app>

以前の WebHost.CreateDefaultBuilder() メソッドを使ってビルドされたアプリの場合は、(ASPNETCORE_HTTP_PORTS ではなく) ASPNETCORE_URLS を設定してください。 例: docker run --rm -it -p 9999:80 -e ASPNETCORE_URLS=http://*:80 <my-app>

影響を受ける API

[なし] :

関連項目