ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

ASP.NET Core 8 に移行したら Azure Web App for Containers のサイトに接続できなくなった件

.NET 6 が 2024/11/12 にサポート終了するため、.NET 8 に移行したら Azure Web App for Containers のサイトに接続できなる現象に遭遇したので、顛末をまとめておきます。

現象

ASP.NET Core で作成したアプリケーションを Azure Web App for Containers 上にデプロイしていました。csproj と Dockerfile のバージョンを 8.0 に更新しました。

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <RootNamespace>WebApp</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
  </ItemGroup>
</Project>
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /code
COPY . .
RUN dotnet restore
RUN dotnet publish --output /output --configuration Release

FROM mcr.microsoft.com/dotnet/aspnet:8.0
COPY --from=build /output /app
WORKDIR /app
ENTRYPOINT ["dotnet", "WebApp.dll"]

更新した Docker Image をデプロイすると、Azure Web App for Containers からレスポンスが返却されない状態になってサイトが表示できなくなりました。

原因

改めて ASP.NET Core 8 の移行ドキュメントを読んでみると、Docker コンテナの既定のポートが 80 から 8080 に更新されていることが分かりました。
learn.microsoft.com

ポート番号の変更理由は、non-root ユーザーに切り替えるときに使いやすくするためとのことです。詳細は、こちらのドキュメントを参照してください。
learn.microsoft.com

対応

ローカル環境では、docker run コマンドで実行する際のポート番号のマッピングを変更します。

# ASP,NET Core 7 まで
$ docker run --rm -it -p 8000:80 --name webapp web-app:0.1.0

# ASP,NET Core 8
$ docker run --rm -it -p 8000:8080 --name webapp web-app:0.1.0

Azure Web App for Containers では、環境変数の App settings で WEBSITES_PORT に 8080 を設定します。

$ az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8080


まとめ

ASP.NET Core 8 に移行したら Azure Web App for Containers のサイトに接続できなくなり、思いのほか解決に時間がかかりました。
今回の件に限らないですが、公式ドキュメントをよく読んでから移行しましょう。