我有一个运行在docker容器中的Node js应用程序,该容器依赖于mongo
容器,该容器使用来自docker hub的映像mongo
。我想制作一个REST API GET: download/db
。当获取请求命中时,我希望它下载转储的数据库备份副本。
为此,我使用了shell命令
mongodump --host localhost --uri mongodb://localhost:27017/db_name --gzip --out /tmp/backup-007434030202704722
但是它显示错误/bin/sh: mongodump: not found
。我不知道这是什么问题。可能是什么问题?
答案 0 :(得分:1)
我猜您正在node
容器中运行此Shell命令,但是mongodump
不会成为node
映像的一部分。
您可能需要修改以下shell命令:
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容器中看到此备份文件。
答案 1 :(得分:0)
文档中提到用户或角色需要允许“查找”操作,或使用“备份”角色: https://docs.mongodb.com/manual/reference/program/mongodump/#required-access
登录到您的服务器-通过腻子或SSH root
需要将“备份”角色授予所有非管理员用户,但是对于我设置的主要管理员用户来说似乎不需要此角色,并且我可以使用以下角色:
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上还有其他示例,包括压缩转储或将其转储到单个存档中。
其他信息:
否则,如果您想以管理员以外的用户身份创建转储,则需要将“备份”角色授予其他用户。