Как использовать команду mongodump из контейнера приложения Nodejs? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть приложение Node js, работающее в Docker-контейнере, который зависит от mongo -контейнера, который использует образ mongo из Docker-концентратора.Я хочу сделать отдых API GET: download/db.Когда поступает запрос на получение, я хочу, чтобы он загрузил резервную копию базы данных.

Для этого я использовал команду оболочки

mongodump --host localhost --uri mongodb://localhost:27017/db_name --gzip --out /tmp/backup-007434030202704722

Но он показывает ошибку/bin/sh: mongodump: not found.Я не знаю, в чем здесь проблема.В чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

В документации упоминается, что пользователю или ролям необходимо разрешить действие 'find' или использовать роль 'backup': https://docs.mongodb.com/manual/reference/program/mongodump/#required-access

Войдите на свой сервер - root с помощью putty или SSH

Роль 'backup' должна быть предоставлена ​​любым пользователям, не являющимся администраторами, но, похоже, она не нужна для основного администратора, которого я настраивал, и я смог использовать следующее:

mongodump -u "admin" --authenticationDatabase "admin"

Это запросит пароль, и как только вы введете дамп BACKUP, на сервере будет создан дамп ...

Новый рабочий каталог с именем "dump" в рабочем состояниипуть к каталогу и, по-видимому, выгрузил в него все базы данных.Это в настоящее время находится в / root / dump / в качестве примера того, что он содержит, и больше примеров использования команды можно увидеть на https://docs.mongodb.com/manual/reference/program/mongodump/#mongodump-with-access-control

Если вы хотите взять резервную копию по отдельности, используйте следующий процесс:

Можно добавить флаг --db, чтобы указать только одну или несколько баз данных, и можно добавить флаг --out, чтобы указать выходной каталог, поэтому, если вы вместо этого хотите создать дампы всех баз данныхв определенном каталоге (например, / backup / mongodumps) вы должны сделать что-то вроде следующего:

mongodump -u "admin" --authenticationDatabase "admin" --out / backup / mongodumps /

или если вы просто хотите, чтобы одна база данных была указана в специальном каталоге:

mongodump -u "admin" --authenticationDatabase "admin" --db [DB name] --out /backup/mongodumps/

Есть также другие примеры на https://docs.mongodb.com/manual/reference/program/mongodump/#mongodump-with-access-control, которые включают сжатие дампов или сброс их в один архив.

Дополнительная информация:

В противном случае, если вы хотите создавать дампы от имени пользователя, отличного от администратора, эти «пользователи» должны будут предоставить роль «резервного копирования».

0 голосов
/ 27 февраля 2019

Полагаю, вы запускаете эту команду оболочки в вашем node контейнере, но mongodump не будет частью node образа.

Возможно, вам придется изменить команду оболочки примерно так:это:

docker run -d --rm -v mongo-backup:/mongo-backup mongo mongodump --db db_name --gzip --out /mongo-backup/backup-007434030202704722

И если вы добавите том mongo-backup в свой контейнер приложения Node JS, то вы сможете увидеть этот файл резервной копии в контейнере js вашего узла.

...