最近、n8nをDocker Composeで運用している中で「バージョンアップしてもデータは残るの?」「どこにデータが保存されているの?」という疑問を持ちました。
同じように悩む方もいると思うので、整理した内容を共有します。
前提: 環境構成
今回の環境は次の通りです。
- Windows 11
- Docker Desktop(WSL2 backend有効)
- WSL2ディストリ: Ubuntu
- n8n + Traefikをdocker-compose.ymlで起動
docker-compose.ymlの一部(n8nサービス)
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
external: true
ここで気になるのが、この n8n_data
の実態。
「どこに保存されてるんだろう?」「ホストから直接見られるの?」というのが今回のテーマです。
いきなり結論
Docker Desktop + WSL2の場合、
n8n_dataの実体はWindowsホストの ext4.vhdx 仮想ディスク内に保管されていて、ホストやWSL2から直接は見えない
です。
ただし、Dockerコンテナ内部からは問題なく確認・操作できます。
確認フローとポイント
以下の手順で調べていきました。
1. Docker Volumeの存在確認
docker volume ls
n8n_data
がリストに出ていれば、ボリュームは存在。
2. マウントポイント確認
docker volume inspect n8n_data
出力例:
"Mountpoint": "/var/lib/docker/volumes/n8n_data/_data"
これを見ると一見「/var/lib/docker/volumes」にあるように見えます。
3. ホストから直接確認
WSL2シェルで
ls -la /var/lib/docker/volumes
→「そんなディレクトリはない」「空」となる。
ここで混乱。
4. Dockerがどこで動いているか確認
docker info
Operating System: Docker Desktop
と出ていれば、Docker Desktopが管理するDocker Engineを使っています。
この場合、
- WSL2ディストリには実体がない
- Windowsホストにも直接パスがない
という構造になります。
5. コンテナ内部から確認
docker exec -it n8n /bin/sh
ls -la /home/node/.n8n
すると中には
- database.sqlite
- config
- binaryData/
- 各種ログ
が存在。
ここが実際に永続化されているディレクトリです。
これが一番確実な確認方法です。
どこに実体があるの?
Docker Desktopの場合、内部的には
C:\Users\あなたのユーザー\AppData\Local\Docker\wsl\data\ext4.vhdx
という仮想ディスクにまとめて格納されています。
このファイルは仮想マシン上のext4ファイルシステムで管理されており、ホストOSから直接中身を覗くことはできません。
「/var/lib/docker/volumes/n8n_data/_data」と表示されるのは「Docker Engineの中での仮想パス」です。
データのバックアップはどうする?
コンテナ経由で取るのがベストです。
例:
docker exec n8n tar czf /tmp/n8n_backup.tar.gz -C /home/node/.n8n .
docker cp n8n:/tmp/n8n_backup.tar.gz ./n8n_backup.tar.gz
これで、WindowsやWSL2にtar.gzで取得できます。
バージョンアップしてもデータは残るの?
これもよくある不安。
結論: 残ります。
理由はシンプルで、
- コンテナは入れ替わる
- ボリュームは別で管理されている
からです。
手順としては
docker-compose pull
docker-compose up -d
とするだけ。
再起動後も n8n_data
ボリュームが同じように /home/node/.n8n
にマウントされ、database.sqliteが読み込まれます。
それでも不安なら、上の手順でバックアップを取ってから更新しましょう。
ホストから直接見えるようにしたい場合
どうしてもWindowsのエクスプローラから中身を見たい場合は、bind mountに変更する方法があります。
docker-compose.ymlで
volumes:
- /mnt/c/Users/あなたのユーザー/n8n_data:/home/node/.n8n
のようにホストパスを指定すれば、Cドライブにファイルが作られます。
ただし、I/Oパフォーマンスが落ちる可能性があるので、運用上許容できるか検討が必要です。
まとめ
- Docker Desktop + WSL2では、ボリュームの実態はext4.vhdxに保管される
- ホストやWSL2から直接見えないのは正常
- コンテナ内部では問題なく確認・操作できる
- バージョンアップしてもデータは残る
- バックアップはdocker cpで取得できる
同じ構成で運用している方の参考になれば幸いです!
何か気になる点があればぜひコメントください。