Macのrancherでdocker-compose up -dを実行したところno matching manifest for linux/arm64/v8 in the manifest list entries
エラーが出ました。
$ docker-compose up -d
[+] Running 0/2
⠴ wordpress Pulling
⠴ db Pulling
no matching manifest for linux/arm64/v8 in the manifest list entries
原因
エラーが出ていたコンテナをpullできるか確認したところ同じエラーを再現できました。
$ docker pull mysql:5.7
5.7: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries
Macのアーキテクチャは、下記の通りarm64です。
$ uname -m
arm64
mysqlのオフシャルコンテナを見ると、amd64がサポートされているようです。
mysqlの公式コンテナは、arm64をサポートしていないようなのでプラットフォームを指定してpullします。
$ docker pull --platform amd64 mysql:5.7
5.7: Pulling from library/mysql
Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
Status: Image is up to date for mysql:5.7
docker.io/library/mysql:5.7
対応
下記のようにmysqlのコンテナにplatformを指定します。
$ git --no-pager diff
diff --git a/docker-compose.yaml b/docker-compose.yaml
index f4101f3..9254390 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -2,6 +2,7 @@ version: '3'
services:
db:
+ platform: linux/x86_64
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
$
エラーが解消しました。
$ docker-compose up -d
[+] Running 2/2
⠿ Container wordpress-db-1 Started
⠿ Container wordpress-wordpress-1 Started
おまけ
dockerコマンドとdocker-composeコマンドでは、アーキテクチャの指定方法に違いがあるようです。
dockerコマンドでプラットフォームをamd64に指定すると問題なく実行されます。
$ docker run mysql:5.7
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
2024-04-03 00:14:23+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
2024-04-03 00:14:23+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-04-03 00:14:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
2024-04-03 00:14:24+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of the following as an environment variable:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
docker-composeでarm64を指定すると失敗します。
$ git --no-pager diff --staged
diff --git a/docker-compose.yaml b/docker-compose.yaml
index f4101f3..4acca58 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -2,6 +2,7 @@ version: '3'
services:
db:
+ platform: amd64
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
$ docker-compose up -d
⠋ Container wordpress-db-1 Creating 0.0s
Error response from daemon: image with reference mysql:5.7 was found but does not match the specified platform: wanted darwin/amd64, actual: linux/amd64
実行結果を見るとdockerコマンドはOSはlinuxが指定され、docker-composeはdarwinが指定されています。