コンテナ

Mac環境で「no matching manifest for linux/arm64/v8 in the manifest list entries」エラーが出る場合の対処

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が指定されています。

タイトルとURLをコピーしました