.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 のサイトに接続できなくなり、思いのほか解決に時間がかかりました。
今回の件に限らないですが、公式ドキュメントをよく読んでから移行しましょう。