📝

Docker compose upでmysqlがExited(1)になる

2023/05/02に公開

DockerでLaravelのdocker-compose.ymlを作成し、docker-compose upを実行したらMySQLのコンテナがうまく立ち上がらなかった。

$ docker-compose up
Creating laravel_redis      ... done
Creating laravel_mysql      ... done
Creating laravel_minio      ... done
Creating laravel_php_fpm    ... done
Creating laravel_phpmyadmin ... done
Creating laravel_nginx      ... done

ステータス上はdoneになっていたが、MySQLに接続できない。

docker-compose.ymlでのMySQLのコンテナの設定は以下の通り。

mysql:
    image: mysql:5.7
    container_name: laravel_mysql
    environment:
        MYSQL_DATABASE: laravel_db
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: root
        MYSQL_PASSWORD: root
        TZ: Asia/Tokyo
    ports:
        - 3306:3306
    volumes:
        - laravel_db_data:/var/lib/mysql:cached

docker ps -aでコンテナを確認してみるとmysqlのコンテナが
Exited (1) About a minute ago
となっていた。

docker compose logsでログを確認してみると以下のエラーが出力されていた。

laravel_mysql       | 2022-11-04 16:48:52+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
laravel_mysql       | 2022-11-04 16:48:52+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
laravel_mysql       | 2022-11-04 16:48:52+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
laravel_mysql       | 2022-11-04 16:48:52+09:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user
laravel_mysql       |     Remove MYSQL_USER="root" and use one of the following to control the root user password:
laravel_mysql       |     - MYSQL_ROOT_PASSWORD
laravel_mysql       |     - MYSQL_ALLOW_EMPTY_PASSWORD
laravel_mysql       |     - MYSQL_RANDOM_ROOT_PASSWORD

どうやらMYSQL_USERには"root"を指定しちゃいけないみたい。
今回は新しくユーザーを作成するのがめんどうだったのでrootユーザーを使いたいので、
MYSQL_USERMYSQL_PASSWORDを削除。

docker-compose.yml
MYSQL_DATABASE: laravel_db
MYSQL_ROOT_PASSWORD: root
- MYSQL_USER: root
- MYSQL_PASSWORD: root
TZ: Asia/Tokyo

無事にMySQLコンテナが起動しました!

参考記事
https://www.gesource.jp/weblog/?p=8628

Discussion