Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries" エラーの解決方法
Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries" エラー解説
原因
このエラーは、以下のいずれかの原因によって発生します。
- 使用しているMySQLイメージがApple M1に対応していない
Docker Hubで公開されているMySQLイメージの中には、まだApple M1に対応していないものがあります。docker pull
コマンドでイメージをダウンロードする際に、--platform linux/arm64
オプションを指定することで、Apple M1に対応したイメージをダウンロードできます。
- Dockerの設定がApple M1に対応していない
Dockerの設定ファイルであるdaemon.json
に、experimental
フラグが設定されていない可能性があります。このフラグを設定することで、DockerはApple M1チップのアーキテクチャに対応したコンテナを実行できるようになります。
解決方法
このエラーを解決するには、以下の方法を試してください。
以下のコマンドを実行して、イメージのアーキテクチャを確認できます。
docker inspect <イメージ名>
出力結果にArchitecture
という項目があり、その値がlinux/arm64
であれば、Apple M1に対応しています。
Apple M1に対応していないイメージの場合
以下のいずれかの方法で、Apple M1に対応したイメージを取得できます。
- --platformオプションを指定して、Apple M1に対応したイメージをダウンロードする
docker pull --platform linux/arm64 mysql
- 公式ドキュメントに記載されている、Apple M1用のイメージを使用する
Dockerの設定ファイルを変更する
以下の手順で、Dockerの設定ファイルdaemon.json
にexperimental
フラグを設定します。
-
テキストエディタで
daemon.json
ファイルを開きます。- ファイルの場所は、以下のコマンドで確認できます。
docker info | grep -E '^Docker Root Dir|^Config File'
{
"experimental": true
}
- ファイルを保存して、Dockerを再起動します。
docker restart
その他
上記の方法で解決しない場合は、以下の情報を調べてみてください。
- 使用しているMySQLのバージョン
- 発生したエラーメッセージの詳細
これらの情報をもとに、インターネット上で解決策を検索したり、専門家に相談したりすることができます。
docker-compose.ymlファイル
version: '3'
services:
mysql:
image: mysql/mysql:8.0.28-arm64
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- ./data:/var/lib/mysql
app:
image: "your-app-image"
ports:
- "8080:8080"
depends_on:
- mysql
このファイルは、MySQLとあなたのアプリケーションをそれぞれmysql
とapp
というサービスとして定義しています。
mysql
サービスは、mysql/mysql:8.0.28-arm64
というイメージを使用します。これは、Apple M1に対応したMySQL 8.0.28のイメージです。app
サービスは、あなたのアプリケーションのイメージを使用します。volumes
セクションで、./data
ディレクトリをMySQLのデータボリュームとしてマウントしています。
docker-compose up
このコマンドを実行すると、docker-compose.yml
ファイルで定義されたサービスがすべて起動されます。
接続確認
ブラウザでhttp://localhost:3306/phpmyadmin
を開くと、phpMyAdminにアクセスできます。
ユーザー名: root
パスワード: password
注意事項
- 上記のコードはサンプルです。あなたの環境に合わせて変更する必要があります。
your-app-image
の部分には、あなたのアプリケーションのイメージ名を指定してください。
補足
- 上記のサンプルコードでは、MySQLのデータボリュームをホストマシンのディレクトリにマウントしています。本番環境では、永続ストレージサービスなどを利用して、データボリュームを永続的に保存する必要があります。
- MySQLのパスワードは、安全な値に変更してください。
その他の解決方法
Rosetta 2は、Apple M1チップ上でIntel x86_64アプリケーションを実行するための互換性レイヤーです。Rosetta 2を使用することで、Apple M1に対応していないMySQLイメージを起動することができます。
Rosetta 2を使用するには、以下の手順が必要です。
- ターミナルで以下のコマンドを実行します。
arch -x86_64 docker run <イメージ名>
- 以下のコマンドを実行して、Rosetta 2がインストールされていることを確認します。
which rosetta-2
別のMySQLイメージを使用する
MySQL 以外にも、さまざまなデータベースエンジンがあります。PostgreSQLやMariaDBなどのデータベースエンジンを使用することで、Apple M1に対応していないMySQLイメージを使用せずに済む場合があります。
専門家に相談する
上記の方法で解決できない場合は、専門家に相談することを検討してください。
この文書では、Apple M1チップ搭載MacでDockerを使ってMySQLを起動する際に発生するエラー "no matching manifest for linux/arm64/v8 in the manifest list entries" の解決方法について解説しました。
mysql docker apple-silicon