概要
新しく買ったM3 Macbook Airでdockerを使ってMySQLの環境を構築しようとした際にエラーが出てしまい、少し躓いたので備忘録として残しておきます。
内容
起動させたいコンテナ
今回は、下記yamlファイルのコンテナを起動させようとしました。
docker-compose.yaml
version: '3.3'
services:
mysql:
image: mysql:5.7
container_name: db-for-go
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --sql-mode=ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
environment:
MYSQL_ROOT_USER: ${ROOTUSER}
MYSQL_ROOT_PASSWORD: ${ROOTPASS}
MYSQL_DATABASE: ${DATABASE}
MYSQL_USER: ${USERNAME}
MYSQL_PASSWORD: ${USERPASS}
TZ: 'Asia/Tokyo'
ports:
- "3306:3306"
volumes:
- db-volume:/var/lib/mysql
volumes:
db-volume:
エラー内容
実行したコマンド
docker-compose up
上記コマンドを実行した際に下記のエラーが発生しました。
表示されたエラー
no matching manifest for linux/arm64/v8 in the manifest list entries
調べてみた感じ、どうやらデフォルトではIntelやAMDといったx86アーキテクチャ向け提供されているDockerイメージを取得しようとしているっぽい。発生したエラーは、「M3チップはarm64アーキテクチャであるため、そのイメージは使えないよ」という内容です。
解決方法
方法①
"docker-compose up"コマンドを実行する前に、事前に必要なイメージをarm64用として引っ張ってくれば解決しそうです。今回は、MySQlのイメージが必要なので
事前に実行するコマンド
docker pull --platform linux/amd64 mysql:5.7
を先に実行し、その後"docker-compose up"を行ったら解決できました。
方法②
yamlファイルに一行追記すればOKでした。
docker-compose.yaml
version: '3.3'
services:
mysql:
image: mysql:5.7
container_name: db-for-go
platform: linux/amd64 # この行を追記
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --sql-mode=ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
environment:
MYSQL_ROOT_USER: ${ROOTUSER}
MYSQL_ROOT_PASSWORD: ${ROOTPASS}
MYSQL_DATABASE: ${DATABASE}
MYSQL_USER: ${USERNAME}
MYSQL_PASSWORD: ${USERPASS}
TZ: 'Asia/Tokyo'
ports:
- "3306:3306"
volumes:
- db-volume:/var/lib/mysql
volumes:
db-volume:
この状態で"docker-compose up"を実行すると解決しました。
さいごに
今回は、yamlファイルで定義した設定でコンテナを作成しようとした際に発生したエラーの対処方法について紹介しました。
2つの方法があったが、使い分けとしては
- 方法①:IntelやAMDなどのチップを利用したPCでも同じ環境を構築したい場合
- 方法②:基本的にAppleシリコンチップのようにarm64アーキテクチャのPCのみで環境を構築する場合
といった形になると個人的に予想しています。
備考
Zennにも同じ記事を作成しています。
Zenn