DockerでMariaDBが立ち上がらない時に mysql.sock エラーを解決した話
DockerでRails + MariaDB環境を構築していた際、DBコンテナが何度も再起動してしまい、正常に立ち上がらない問題に遭遇しました。
今回は、Dockerを異常終了した後からDBが起動しなくなったケースです。
ログを確認すると、下記のようなエラーが出力されていました。
~/code/heroku/exercise-api: [dev]$:
->> docker logs 04970f9cca4a
2026-05-06 03:34:50+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:12.2.2+maria~ubu2404 started.
chown: changing ownership of '/var/lib/mysql/mysql.sock': No such file or directory
2026-05-06 03:47:24+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:12.2.2+maria~ubu2404 started.
chown: changing ownership of '/var/lib/mysql/mysql.sock': No such file or directory
2026-05-06 03:51:04+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:12.2.2+maria~ubu2404 started.
chown: changing ownership of '/var/lib/mysql/mysql.sock': No such file or directory
原因
原因は docker-compose.yml の volume マウント設定でした。
私の環境では、下記のようにホスト側の .data/mysql を MariaDB コンテナの /var/lib/mysql にマウントしていました。
volumes:
- ./.data/mysql:/var/lib/mysql
Dockerを異常終了したことにより、mysql.sock や MariaDB の内部ファイル状態が壊れてしまい、次回起動時に正常初期化できなくなっていました。
その結果、
mysql.sock: No such file or directory
というエラーが発生していました。
解決方法
結論としては、volume マウントしているディレクトリーを削除することで解決しました。
rm -rf .data
これを削除した後、dockerを停止させ、imagesも削除しコンテナを再作成します。
docker compose up -d
すると、MariaDB が正常に起動するようになりました。
なぜこれで直るのか?
MariaDB コンテナは、初回起動時に /var/lib/mysql 配下へデータベースファイルや mysql.sock を生成します。
しかし、ホスト側ディレクトリをマウントしている場合、
- Docker異常終了によるファイル破損
- 壊れた socket ファイル
- 古いDBデータ
- 権限不整合
- root所有ファイル
などが残っていると、MariaDB の初期化処理が失敗することがあります。
特に今回のような、
chown: changing ownership of '/var/lib/mysql/mysql.sock'
系のエラーは、volume マウント先の状態異常が原因であるケースが多いです。
DBデータを永続化したい場合
volume マウント自体が悪いわけではありません。
もし永続化したい場合は、一度 .data/mysql を削除してから再作成すると改善する場合があります。
rm -rf ./.data/mysql
mkdir -p ./.data/mysql
その後、再度コンテナを起動します。
docker compose up
まとめ
MariaDB コンテナが起動しない時は、まずログを見ることが重要です。
今回のように、
mysql.sock: No such file or directory
が出ている場合は、Docker異常終了による volume データ破損や、/var/lib/mysql の volume マウントを疑ってみるとよいです。
今回の解決策
-
docker-compose.ymlの volume マウントを削除 - もしくは
.data/mysqlを削除して再生成
Docker + MariaDB 環境で同じ問題に遭遇した方の参考になれば幸いです。