こんにちは。
Dockerを学び始め、Docker ComposeでRails/MySQLのアプリケーションを構築した際にエラーに遭遇したので、対処法をこちらにアウトプットしていきます。
尚、「それは違うよ」など指摘箇所がございましたら
ご教授いただけますと幸いです。
対象読者
-
ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
に悩まされているApple siliconをお使いの方。
環境
まずは私の開発環境について記載します。
- MacBook Air(M1, 2020) Monterey 12.2.1
- Docker Client 20.10.12
- Docker Server 20.10.12
- docker-compose version 1.29.2
結論
お忙しい方向けに先に結論を述べておきます。
いくつか方法はあるみたいです。
① platform: linux/x86_64
を docker-compose.yml
に追加。
db:
# 以下を追加
platform: linux/x86_64
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
参考: M1 Macでno matching manifest for linux/arm64/v8が発生した
② FROM mysql/mysql-server:latest
を Dockerfile
に追加。
FROM mysql/mysql-server:latest
上記の違いとしては docker-compose.yml
に記載しているCPUアーキテクチャが異なります。②の方は、 platform: linux/amd64
であり、①の方は platform: linux/x86_64
を指定しております。
ご自身のCPUアーキテクチャと同じ方法をやってみるといいかと思います。
*CPUアーキテクチャによって方法が異なるのか偶然の事象だけなのか、お恥ずかしながら筆者の勉強不足のためわかりかねますので、あくまでも一つの参考として受け取ってください。詳しい方がいらっしゃいましたら、ご教授いただけますと幸いです。
どんなエラー?
では、どんなエラーが発生したのかを見ていきます。
以下のコマンドでコンテナを開始した際に、 ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
が表示され、正常にコンテナを開始することができませんでした。
$ docker-compose run web rails new . --force --database=mysql
Creating network "rails_docker_default" with the default driver
Pulling db (mysql:8.0)...
8.0: Pulling from library/mysql
ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
以前にもRailsで開発をしていた際に、似たようなワードのエラーと遭遇したことがありました。
なので、調査としては比較的スムーズでした。
ちなみに余談ですが、Dockerさんは Rosetta 2 のインストールを推奨しているようです。
Rosseta 2を適用しているかはFinderからでも確認できるので こちら で確認してみるといいかもしれません。
Docker Desktop for Apple silicon
....
to get the best experience, we recommend that you install Rosetta 2
Docker公式
話を戻します。
こちらの記事 で私の状況と全く同じ方がいらっしゃったので、参考にさせていただきました。
docker-compose.yml
に platform: linux/x86_64
とプラットフォームを指定してあげます。
db:
# 以下を追加
platform: linux/x86_64
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
では、再度コマンドを打つと...
$ docker-compose run web rails new . --force --database=mysql
Pulling db (mysql:8.0)...
8.0: Pulling from library/mysql
15115158dd02: Pull complete
d733f6778b18: Pull complete
1cc7a6c74a04: Pull complete
c4364028a805: Pull complete
.
.
.
Done in 15.61s.
Webpacker successfully installed 🎉 🍰
しっかりと正常にコンテナを開始して、webpackerのインストールまでいきlocalhostの初期画面もしっかり表示されたので成功しました。
最後までお読みいただきありがとうございます。
この記事でエラー解消の一助となれば嬉しいです。