🐬
M1 Docker - mysql:5.7 Restarting (1) Less than a second ago ...
M1 Mac で MySQL イメージが利用できないんですって
ARM64 アーキテクチャー向けのイメージがすべて利用可能となっているわけではありません。 Intel イメージの実行には、エミュレーションのもとで--platform linux/amd64をつけて実行することが必要です。 特に mysql イメージは ARM64 向けには利用できません。 これに対する当面の対処としては mariadb イメージを利用してください。
んんーーー? 🤷♂️
公式の案内の通り mariaDB に変更する
変更前
# docker-compose.yml
...
database:
container_name: database
hostname: database.example.com
platform: linux/x86_64
image: mysql:5.7
privileged: true
restart: always
volumes:
- type: volume
source: database-volume
target: /var/lib/mysql
volume:
nocopy: true
- type: bind
source: ./database/conf/my.cnf
target: /etc/my.cnf:ro
user: 'mysql:mysql'
ports:
- target: 3306
published: ${DATABASE_PORT:-3306}
protocol: tcp
mode: host
...
変更後
# docker-compose.yml
...
database:
container_name: database
hostname: database.example.com
platform: linux/x86_64
# ここを変えました!
image: mariadb:10.4.24-focal
privileged: true
restart: always
volumes:
- type: volume
source: database-volume
target: /var/lib/mysql
volume:
nocopy: true
- type: bind
source: ./database/conf/my.cnf
target: /etc/my.cnf:ro
user: 'mysql:mysql'
ports:
- target: 3306
published: ${DATABASE_PORT:-3306}
protocol: tcp
mode: host
environment:
TZ: 'Asia/Tokyo'
BIND-ADDRESS: 0.0.0.0
MARIADB_DATABASE: ${DATABASE_NAME:-database}
MARIADB_USER: ${DATABASE_USER:-mysql}
MARIADB_PASSWORD: ${DATABASE_PASS:-secret}
MARIADB_ROOT_PASSWORD: ${DATABASE_ROOT_PASS:-secret}
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 'yes'
MARIADB_RANDOM_ROOT_PASSWORD: 'no'
...
イメージのバージョンは、LTSを確認してイメージを指定しています。
Long Term Support(LTS) で長い期間サポートしてくれている方がありがたいので、少し先の長いバージョンを採用。
(補足) MariaDBのイメージには必須のenv設定あり
当記事には関係ないところですけど。なかなか立ち上がらないときは、docker-compose.yml内のenv設定が怪しいかもです。
ログ
コンテナの状態確認
# コンテナの状態確認
% docker ps -a
CONTAINER ID ... STATUS ...
c3152a76509b ... Restarting (1) 1 second ago ...
# コンテナのログ確認
% docker logs c3152a76509b
2022-03-11 20:06:59+09:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of MARIADB_ROOT_PASSWORD, MARIADB_ALLOW_EMPTY_ROOT_PASSWORD and MARIADB_RANDOM_ROOT_PASSWORD
docker-compose.yml 編集
...
# ※ .envファイルを利用する形式で記述しています。
environment:
TZ: 'Asia/Tokyo'
BIND-ADDRESS: 0.0.0.0
MARIADB_DATABASE: ${DATABASE_NAME:-database}
MARIADB_USER: ${DATABASE_USER:-mysql}
MARIADB_PASSWORD: ${DATABASE_PASS:-secret}
# ↓ のあたりが必要でした
MARIADB_ROOT_PASSWORD: ${DATABASE_ROOT_PASS:-secret}
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 'yes'
MARIADB_RANDOM_ROOT_PASSWORD: 'no'
...
アーキテクチャが違うと、既存の開発環境の移行に手間取りますね。ARMの件がわかっていれば、どうってことはないのですが。
Discussion