Apple Siliconでlinux/amd64向けのコンテナーイメージを作成するときの備忘録

このエントリは2026/06/10現在の情報に基づいています。将来の機能追加や仕様変更に伴い、記載内容からの乖離が発生する可能性があります。

いつもの主から以下のような問い合わせがあった。

問い合わせ1

Apple Siliconのマシンで、linux/amd64プラットフォームのコンテナーイメージを作成するにはどうしたらいい?

話によると、Azure Container Appsで久々に遊ぼうとしたところ、作成したコンテナーイメージが動作しなかったので原因を調査したら、linux/arm64ベースのコンテナーイメージを作成してしまっていた、というのが背景にある(これはちょっと調べたらわかりそうなものだが、それは言わないでおく)。

主も気づいた通り、Apple Siliconのマシンでビルドすると、デフォルトでは linux/arm64 になってしまう。そしてAzure Container Appsはlinux/amd64のコンテナーイメージのみをサポートするため、なんとかビルドしたいのだ、という問い合わせ。

Azure Container Apps では、以下がサポートされています。

  • 任意の Linux ベースの x86-64 (linux/amd64) コンテナー イメージ
  • 任意のパブリックまたはプライベート コンテナー レジストリからのコンテナー
  • オプションのサイドカーと init コンテナー

Azure Container Apps supports:

  • Any Linux-based x86-64 (linux/amd64) container image
  • Containers from any public or private container registry
  • Optional sidecar and init containers

Azure Container Apps のコンテナー / Containers in Azure Container Apps
https://learn.microsoft.com/azure/container-apps/containers

解決策1

これは簡単で、--platformで明示的に指定すればいい。例えば、以下のような感じ。

docker build --platform linux/amd64 -t hoo/bar:latest .

問い合わせ2

ちょっとできるようになると、また質問したくなるのが人情ってもの。次はNative Image作成時の問題。

Apple Siliconのマシンで、linux/amd64プラットフォームのコンテナーイメージは作成できるようになった。だがNative Imageを作成しようとしたら、ResourceExhausted … cannot allocate memory のメッセージが出て作成できない。どうしたらいい?

「それはあんたの環境でメモリの割り当てが不足してるからや!」という言葉が出そうになったが、優しく伝えることにした。

解決策2

例えばDocker Desktopを使っている場合、デフォルトのリソース割り当ては

  • メモリ上限:8 GB
  • スワップ:1 GB

ぐらいになっている(環境によって異なる)。この8 GBの上限により、リソース枯渇が発生していたので、この上限を緩和してあげればいい。以下はその例。

とはいえ

linux/amd64ベースのNative Imageコンテナーを作成しようとするなら、無理にApple Silicon上でビルドするのではなく、GitHub Actionsなどのlinux/amd64ベースのhosted runner上でビルドしたほうがいい。Apple Silicon上でビルドするとQEMU エミュレーション経由になるため、特に GraalVM Native Image のような重い処理では遅くなり、メモリ不足になりやすい、というのが理由。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください