Skip to content

Apple Silicon (M1/M2) で MySQL Docker イメージが実行できない問題の解決策

問題の概要

Apple Silicon(M1/M2チップ)搭載のMacでDockerを使用する際、MySQLイメージを実行しようとすると以下のエラーが発生することがあります:

ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries

このエラーは、MySQLの公式DockerイメージがARM64アーキテクチャに対応していないために発生します。DockerはデフォルトでネイティブのARM64イメージを探しますが、多くのMySQLイメージはlinux/amd64アーキテクチャでのみ利用可能です。

解決策

方法1: プラットフォームの明示的指定(推奨)

Docker Composeを使用している場合、docker-compose.ymlファイルでプラットフォームを明示的に指定します:

yaml
version: '3'

services:
  db:
    image: mysql:5.7
    platform: linux/amd64  # この行を追加
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: wp
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp

方法2: 環境変数でのグローバル設定

すべてのDockerコマンドでamd64アーキテクチャを使用するように設定:

bash
echo 'export DOCKER_DEFAULT_PLATFORM=linux/amd64' >> ~/.zshrc
source ~/.zshrc

方法3: 個別のdocker runコマンドでの指定

bash
docker run --platform linux/amd64 --name mysql-container -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7

方法4: Dockerfileでのプラットフォーム指定

dockerfile
FROM --platform=linux/amd64 mysql:5.7
# その他の設定

代替ソリューション

MariaDBの使用

MySQLの代わりにネイティブARM64サポートがあるMariaDBを使用する:

yaml
services:
  db:
    image: mariadb:10.5.8
    # MySQLと同様の環境変数を使用可能

MySQLのARM64ネイティブイメージ

Oracleが提供するARM64対応のMySQLイメージを使用する:

yaml
services:
  db:
    image: mysql/mysql-server:8.0
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: wp

チーム開発での考慮事項

異なるアーキテクチャのマシンで作業するチームの場合、環境固有の設定を分離することが推奨されます。

docker-compose.yml(共通設定):

yaml
version: '3'
services:
  db:
    image: mysql:5.7
    # その他の共通設定

docker-compose.mac.yml(M1/M2固有設定):

yaml
version: '3'
services:
  db:
    platform: linux/amd64

以下のコマンドで両方のファイルを読み込んで起動します:

bash
docker-compose -f docker-compose.yml -f docker-compose.mac.yml up

パフォーマンスに関する注意点

WARNING

AMD64イメージをApple Siliconでエミュレーション実行すると、ネイティブ実行に比べてパフォーマンスが低下し、メモリ使用量が増加する可能性があります。可能な場合はネイティブARM64イメージの使用を検討してください。

特にMySQLでは、エミュレーション環境ではLinux Native AIO(非同期I/O)がサポートされないという制限があります:

[Warning] [MY-012654] [InnoDB] Linux Native AIO disabled.

まとめ

Apple Silicon搭載MacでMySQL Dockerイメージを使用する主な解決策は:

  1. プラットフォームの明示的指定platform: linux/amd64
  2. MariaDBへの切り替え(ネイティブARM64サポート)
  3. Oracle提供のMySQLイメージの使用

プロジェクトの要件とパフォーマンスのバランスを考慮して最適な方法を選択してください。チームで開発している場合は、環境固有の設定を分離する方法が効果的です。