💭
Laravel Sail × MariaDBコンテナが起動しない原因と解決法
はじめに
Laravel Sailで開発環境を構築していると、MariaDB(MySQL)コンテナが起動時にエラーで止まることがあります。
この記事では、よくある原因とその解決方法をまとめます。
症状
- docker-compose.yml でMariaDB(MySQL)サービスを定義
- ./vendor/bin/sail up -d でコンテナ起動
- MySQLコンテナが exited (1) で停止
- ログを見ると Operation CREATE USER failed for 'root'@'%' やUnsupported storage engine: InnoDB などのエラー
原因
1.MySQLとMariaDBのデータ形式の違い
- 以前MySQL 8.0で作成されたデータボリューム(ibdata1など)がMariaDB 10.6でサポートされていない
- MariaDBが起動時にInnoDB初期化で失敗
2.ユーザー重複エラー
- MariaDBの初期化スクリプトで root ユーザーが既に存在し、CREATE USERで重複エラー
3.環境変数の不整合
- MYSQL_ROOT_PASSWORD などの値が不適切、または初期化処理が複数回走っている
解決方法
1. データボリュームの完全削除
開発用でデータ消失OKなら、古いMySQL用ボリュームを削除して新規作成します。
docker rm api-mysql-1
docker volume rm sail-mysql
./vendor/bin/sail up -d
docker rm api-mysql-1docker volume rm sail-mysql./vendor/bin/sail up -d
2. docker-compose.ymlの修正
環境変数を明示的に設定し、初期化エラーを回避します。
mysql:
image: 'mariadb:10.6'
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: 'secret'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: 'XXXX'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'secret'
volumes:
- 'sail-mysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysql", "-psecret", "-e", "SELECT 1;"]
retries: 3
timeout: 5s
3. .envファイルのDB設定も揃える
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=XXXX
DB_USERNAME=user
DB_PASSWORD=secret
まとめ
Laravel SailでMariaDBコンテナが起動しない場合は、
「MySQLとMariaDBのデータ形式の違い」「ユーザー重複」「環境変数の不整合」が主な原因です。
ボリューム削除&環境変数の見直しでほぼ解決できます。
Discussion