docker-composeの場合、execコマンドでmongoDBのダンプを取得して、
mongoDBにリストアすることが可能。
自分の場合は、ダンプ後のgzipが読み込めない現象が発生したので、結局この方法は断念しました。
作業メモとして記載しておきます。
やりたかったこと
docker-compose上のGrowiから、mongoDBの内容をダンプして、
ローカルのDockerで用意したmongoDBにインポートしたかった。
DBのエクスポート
# mongoイメージを使って、mongodumpコマンドで出力
docker-compose exec mongo mongodump -archive -gzip -db growi > growi.gz
MongoDBサーバーの起動
# ローカルにmongoDBサーバーを立ち上げる。
# ローカルのポートにバインド
docker run -d --name mongodb -p 27017:27017 -v $PWD:/workdir mongo
Mongoクライアントで、リストア
# mongoイメージで、ログイン
docker run --net=host -it --rm -v $PWD:/workdir mongo bash
cd workdir
# バックアップからリストアする。
mongorestore --archive=growi.gz
—net=host
により、コンテナ内からホストOSのポート(27017)に接続が可能になっている。
$ mongorestore --archive=backup.tar.gz
Failed: stream or file does not appear to be a mongodump archive
0 document(s) restored successfully. 0 document(s) failed to restore.
stream or file does not appear to be a mongodump archive
このようなエラーが出て、うまくリストアできなかった。。
バックアップの仕方が悪いのだろうか。
バージョンによって、コマンドが少し変わってるようなのでそのあたり調べないと。。
バージョン
dockerで使ったmongoのバージョン
- MongoDB shell version v4.4.4
- MongoDB server version: 4.4.4
Growiで稼働中のmongoDBのバーション
- image: mongo:3.6