🐬

M1 Docker - mysql:5.7 Restarting (1) Less than a second ago ...

2022/03/11に公開

M1 Mac で MySQL イメージが利用できないんですって

https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/apple-silicon/#known-issues

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) で長い期間サポートしてくれている方がありがたいので、少し先の長いバージョンを採用。

https://hub.docker.com/_/mariadb

(補足) 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の件がわかっていれば、どうってことはないのですが。

https://zenn.dev/hashi8084/articles/136458dd71a866

Discussion