概要
- Windows環境でDocker Desktop(WSL2バックエンド)を利用してMySQLコンテナを立ち上げた場合、
再起動時にデータが消える 問題に遭遇することが多い。 - 原因は「コンテナ内の
/var/lib/mysqlディレクトリが一時ストレージとして扱われる」ためであり、
永続化するには Docker Volume を正しく設定する必要がある。 - 本ナレッジでは、Windows + WSL2 環境でMySQLコンテナのデータを永続化する正しい構成方法と、
Windows特有の罠(パス/権限/速度問題) について解説する。
手順
1. 環境の前提
- OS:Windows 10 / 11
- Docker Desktop:v4.0 以降(WSL2バックエンド)
- WSLディストリビューション:Ubuntu 20.04 など
-
MySQLイメージ:
mysql:8.0推奨
2. Volumeを利用したMySQL起動
docker-compose.yml 例
version: '3.9'
services:
db:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: app_db
TZ: Asia/Tokyo
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
driver: local
💡
volumesで定義したmysql_dataは Docker管理下の永続ストレージ に保存されるため、
コンテナを削除してもデータは残る。
3. 永続化の確認
# コンテナ停止・削除
docker compose down
# Volumeが残っているか確認
docker volume ls
# 再度コンテナ起動(データが残っていることを確認)
docker compose up -d
4. Windows環境固有の罠
| 問題点 | 内容 | 対処方法 |
|---|---|---|
| ❌ bind mountでCドライブを指定すると遅い | WSL⇔Windows間のI/O遅延が発生 | Docker Volumeを使う(/var/lib/docker/volumes/... 内で完結) |
| ⚠️ パス区切り文字の違い |
C:\Users\xxx 形式はDocker内部で正しく解釈されない |
/mnt/c/Users/... 形式を使用 |
| ⚠️ 権限エラー | Windows側のNTFS権限とLinux側のUID/GID不一致 |
chmod -R 777 または chown mysql:mysql を実行 |
| ⚠️ WSLディストリビューション削除で全データ消失 | Docker VolumeはWSL内に保存 | 定期的に docker volume inspect でパス確認&バックアップを推奨 |
5. 明示的にホストディレクトリをマウントしたい場合
テスト用途などで、ホスト側に直接データを置きたい場合。
volumes:
- ./mysql_data:/var/lib/mysql
⚠️ ただしこの方法は Cドライブ直下では非常に遅い ため、
以下のように WSL内ディレクトリに配置 するのが推奨:
cd /home/youruser/projects/app
mkdir -p mysql_data
volumes:
- /home/youruser/projects/app/mysql_data:/var/lib/mysql
注意点・Tips
-
Docker Volumeの実体確認
docker volume inspect mysql_data⇒
"Mountpoint"に実際の保存パスが表示される(例:/var/lib/docker/volumes/mysql_data/_data) -
バックアップ/リストア
docker run --rm -v mysql_data:/volume -v $(pwd):/backup busybox tar czf /backup/mysql_backup.tgz -C /volume . -
MySQLデータを消したい場合
docker volume rm mysql_data
まとめ
- Windows(WSL2)環境では、Volume方式が最も安定。
-
bind mountでWindowsパスを直接指定すると、速度・権限トラブルが頻発する。 -
docker volume inspectで保存パスを定期確認し、
WSL再インストール時のデータ消失リスク に備えてバックアップを取るのが重要。
改訂履歴
- v1.0 (2025-11-06):初版作成(Windows環境でのVolume永続化方法を追加)