如何从Node.js应用容器使用mongodump命令?

时间:2019-02-27 11:15:19

标签: node.js docker docker-compose mongodump

我有一个运行在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。我不知道这是什么问题。可能是什么问题?

2 个答案:

答案 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上还有其他示例,包括压缩转储或将其转储到单个存档中。

其他信息:

否则,如果您想以管理员以外的用户身份创建转储,则需要将“备份”角色授予其他用户。