连接到VPS上的MongoDB Docker映像并导入大型JSON文件

时间:2019-06-28 01:18:28

标签: mongodb docker vps

我在我的1and1 VPS端口27017:27017上运行了mongodb docker容器。容器的名称是mongo。我需要连接到已经运行的容器,并导入11GB的超大JSON文件(备份数据库)。有人知道我该怎么做吗?我尝试查看其他人的问题,但没有一个人给出正确的答案。 JSON文件也已经上传到VPS,所以我猜我需要包括正确的路径吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

可能合适的解决方案:

  • 使用卷安装大文件。假设您正在使用以下命令运行docker容器
docker run --name mongodb mongo:latest

大文件位于主机/backup/mongo/largefile.json上此路径内,为了将该文件安装在容器中,您需要启动一个新容器,而不是已经运行的容器,因此您可以自由地停止旧容器,然后使用以下命令运行新容器:

docker stop mongodb
docker rm mongodb
docker run --name mongodb -v /backup/mongo:/home/ mongo:latest

以上命令将停止名为mongodb的容器,然后将其删除,然后它将创建一个具有相同名称的新容器并将此目录/backup/mongo装入此路径/home在容器内。 最后,如果您有一个特定的Shell脚本,它将在装入文件后为您执行导入,则可以将此脚本添加到/docker-entrypoint-initdb.d/中,并且它将在容器第一次启动后执行。现在最终的命令将是(根据需要修改命令):

  

此命令不为/data/db提供任何数据持久性,因此您需要使用-v为其创建卷

docker run --name mongodb -v /backup/mongo:/home/ -v /path/to/my/script:/docker-entrypoint-initdb.d/ mongo:latest

要确认大文件位于容器内,可以使用以下命令(假设容器名称为mongodb):

docker exec -it mongodb bash

  • 从本地计算机连接到VPS上的容器。正如您在评论中提到的那样,您可以使用计算机中的gui应用程序进行导入。在这种情况下,您需要考虑以下因素:

    • 从Mongo 3.6开始,它将不会公开显示。因此,您需要使用附加在mongod --bind_ip 0.0.0.0命令末尾的docker run来告诉它公开,但是我不建议您遵循此方法,因为它不安全。或者,您可以使用SSH隧道将您连接到容器IP。

我的最终建议是采用第一种方法,因为该文件已在VPS上可用,而无需再次上传。