Skip to content

ARM64ホストでのAMD64 Dockerイメージ実行ガイド

問題点

M1/M2 Mac(ARM64アーキテクチャ)でAMD64(x86_64)ベースのDockerイメージを実行しようとすると、以下の警告が表示され、実行できない場合があります:

bash
WARNING: The requested image's platform (linux/amd64) does not
match the detected host platform (linux/arm64/v8)
and no specific platform was requested.

--platform linux/amd64 オプションを追加してもエラーメッセージは消えますが、コンテナがすぐに終了してしまい、正常に動作しないことがあります。

解決方法

1. プラットフォーム指定の正しい使用方法

--platform オプションは docker run コマンドの直後に指定する必要があります:

bash
docker run --platform linux/amd64 イメージ名

WARNING

オプションの順序が間違っていると、プラットフォーム指定が機能しない場合があります。必ず run の直後に配置してください。

2. コンテナの強制実行とデバッグ

コンテナがすぐに終了する問題に対処するには、エントリーポイントを上書きして対話モードで実行します:

bash
docker run -it --platform linux/amd64 --entrypoint=/bin/bash イメージ名

これにより、コンテナ内で対話的なシェルセッションを開始できます。

3. 完全な実行例

以下のコマンドでAMD64イメージが正常に実行できることを確認できます:

bash
# AMD64 Ubuntuイメージの実行テスト
docker run --rm -ti --platform linux/amd64 ubuntu:latest uname -m
# 出力: x86_64

# ARMバージョンの実行(比較用)
docker run --rm -ti --platform linux/arm64 ubuntu:latest uname -m
# 出力: aarch64

技術的背景

M1/M2 Macでは、Docker DesktopがRosetta 2エミュレーション技術を使用してAMD64イメージの実行を可能にしています。これはApple Silicon上でIntelベースのアプリケーションを実行するための変換レイヤーです。

TIP

Docker Desktop for Macの最新版を使用していることを確認してください。Rosetta 2統合はDocker Desktop 4.3.0以降で利用可能です。

トラブルシューティング

コンテナがすぐに終了する場合

  1. エントリーポイントの確認: 上記の --entrypoint オプションを使用
  2. ログの確認: docker logs コンテナID で終了理由を調査
  3. インタラクティブモードの使用: -it フラグを追加

パフォーマンスの問題

AMD64エミュレーションはネイティブ実行よりも遅くなる可能性があります。可能であれば、マルチアーキテクチャイメージやARM64ネイティブイメージの使用を検討してください。

代替アプローチ

Dockerイメージをマルチアーキテクチャでビルドすることをお勧めします:

dockerfile
# マルチアーキテクチャビルドの例
FROM --platform=$BUILDPLATFORM alpine AS build
# ビルド処理...

FROM alpine
COPY --from=build /app /app

まとめ

M1/M2 MacでAMD64 Dockerイメージを実行するには:

  1. --platform linux/amd64 オプションを正しい位置に指定
  2. 必要に応じてエントリーポイントを上書き
  3. Docker Desktopの最新版とRosetta 2機能が有効化されていることを確認

これにより、異なるアーキテクチャ間での互換性問題を解決し、スムーズな開発体験を実現できます。