MacのDocker上で動かしたMongoDBのデータを保存しておきたいと思い、Data Volumeを使って永続化を試みましたが失敗しました。
具体的には以下の手順で/data/db以下をホストのMacのフォルダにし、データベースの中身をコンテナから切り離し、データの永続化をしようとしましたが、エラーが発生しました。
docker run --name mongo-test -v ~/workspace/mongo:/data/db -d mongo:tag
エラーメッセージ
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=123456789
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] db version v3.2.3
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] git version: 123456
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] allocator: tcmalloc
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] modules: none
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] build environment:
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] distmod: debian71
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] distarch: x86_64
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] target_arch: x86_64
2016-02-28T14:32:16.694+0000 I CONTROL [initandlisten] options: {}
2016-02-28T14:32:16.699+0000 I STORAGE [initandlisten] exception in initAndListen: 98 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
2016-02-28T14:32:16.699+0000 I CONTROL [initandlisten] dbexit: rc: 100
公式のイメージに手を加えていないですし、一個しか動いていないのにすでに使用中というメッセージが出ます。
調べたところ、MongoDBはVirtualBoxの共有フォルダはサポートしていないようです。MacのDockerはVirtualboxで動かしているため、この問題に引っかかっているらしく、解決はできなさそうです…
https://docs.mongodb.org/manual/administration/production-notes/#fsync-on-directories
そのため、MacのDocker上で動くMongoDBのデータを永続化するにはData Volumeは使えず、別の手段を取る必要があるようです。どうするのがいいのかは現在調査中です…