はじめに
Cloud RunにDocker Imageをアップロードしようとしたところ、M1 Macでビルドする際には以下のオプションを利用しないとダメなことに気が付きました。
$ docker build ./ -t hoge --platform linux/amd64
ただし以下のDockerfileだとdotnet restoreでずっとビルドが進まなくなってしまいました。
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env WORKDIR /App COPY . ./ RUN dotnet restore RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /App COPY --from=build-env /App/out . ENTRYPOINT ["dotnet", "CloudRunSample.dll"]
その解決方法がわかったので書き残しておきたいと思います。
解決方法
以下の4つの対応をしました。
FROM mcr.microsoft.com/dotnet/sdk:8.0に--platform=$BUILDPLATFORMを追加するARG TARGETARCHを追加するdotnet restoreのオプションに-a $TARGETARCHを追加するdotnet publishのオプションに-a $TARGETARCHを追加する
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env ARG TARGETARCH WORKDIR /App COPY . ./ RUN dotnet restore -a $TARGETARCH RUN dotnet publish -c Release -o out -a $TARGETARCH FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /App COPY --from=build-env /App/out . ENTRYPOINT ["dotnet", "CloudRunSample.dll"]