Cloud Runデプロイ時の「Cloud Run does not support image ~ must support amd64/linux.」エラー

記事タイトルとURLをコピーする

G-gen の佐々木です。当記事では、MacOS が搭載する Apple Silicon のような ARM64 ベースの環境でビルドしたコンテナイメージを Cloud Run にデプロイしたときに発生するエラーについて解説します。

事象

以下のように、ARM64 ベースの環境で docker build コマンドを使用して、アプリケーションをビルドします。

# アーキテクチャ確認
$ uname -m
arm64
  
# コンテナイメージをビルド・プッシュ
$ docker build -t <Artifact Registryのパス>/<イメージ名>:<タグ> .
$ docker push <Artifact Registryのパス>/<イメージ名>:<タグ>

その後、コンソールや gcloud CLI を使用して Cloud Run サービスへのデプロイを試みました。すると、以下のエラーメッセージが出力され、デプロイが失敗しました。

Cloud Run does not support image '{Artifact Registry内のコンテナイメージのパス}': Container manifest type 'application/vnd.oci.image.index.v1+json' must support amd64/linux.

Cloud Run のデプロイに失敗する

原因

Cloud Run は、実行するコンテナイメージとして、x86_64(amd64)アーキテクチャのコンテナイメージを想定しています。

docker build コマンドは、デフォルトではホストマシンの CPU アーキテクチャに合わせたコンテナイメージを生成します。そのため、Arm ベースのプロセッサを搭載した Mac 環境などで、何も指定せずに docker build を実行すると、ホストマシンの CPU アーキテクチャ(ARM64)に合わせたコンテナイメージが作成されます。

このような ARM64 向けにビルドされたイメージを Cloud Run へデプロイしようとすると、アーキテクチャの不一致により、前述のエラーメッセージが表示されてデプロイに失敗します。

対処法

docker コマンドを使用する方法

docker コマンドを使用してローカル PC 上でコンテナイメージをビルドしたい場合、以下のように --platform オプションで CPU アーキテクチャを指定してビルドを実行します。

# docker コマンドを使用して Cloud Run 用のコンテナイメージをビルドする
$ docker build --platform linux/amd64 -t <Artifact Registryのパス>/<イメージ名>:<タグ> .
$ docker push <Artifact Registryのパス>/<イメージ名>:<タグ>

Cloud Build を使用する方法

Google Cloud のサーバーレス CI/CD サービスである Cloud Build を使うと、クラウド上のフルマネージドのビルド環境でコンテナイメージをビルドすることができます。

Cloud Build を使用する場合、開発者ごとの環境の差異を考慮することなく、同一の環境でビルドを行うことができるメリットがあります。

gcloud CLI の gcloud builds submit コマンドを使用することで、Cloud Build を使用してビルドとプッシュを一括で行うことができます。

# Cloud Build を使用して Google Cloud のビルド環境でコンテナイメージをビルドする
$ gcloud builds submit --tag <Artifact Registryのパス>/<イメージ名>:<タグ>

佐々木 駿太 (記事一覧)

G-gen 最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月に G-gen にジョイン。Google Cloud Partner Top Engineer に選出(2024 / 2025 Fellow / 2026)。好きな Google Cloud プロダクトは Cloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。