连接到VPS上的MongoDB Docker映像并导入大型JSON文件
我有一个mongodb docker容器在我的1和1 VPS端口27017:27017上运行。容器的名称是mongo。我需要连接到已经运行的容器,并导入一个11GB的非常大的JSON文件(备份数据库)。有人知道我怎么做吗?我试过看一些其他人的问题,但没有一个答案是正确的。而且JSON文件已经上传到VPS,所以我猜我需要包含正确的路径吗?感谢您的帮助。可能适合的解决方案:连接到VPS上的MongoDB Docker映像并导入大型JSON文件,mongodb,docker,vps,Mongodb,Docker,Vps,我有一个mongodb docker容器在我的1和1 VPS端口27017:27017上运行。容器的名称是mongo。我需要连接到已经运行的容器,并导入一个11GB的非常大的JSON文件(备份数据库)。有人知道我怎么做吗?我试过看一些其他人的问题,但没有一个答案是正确的。而且JSON文件已经上传到VPS,所以我猜我需要包含正确的路径吗?感谢您的帮助。可能适合的解决方案: 使用卷装载大文件。假设您正在使用以下命令运行docker容器 而大文件位于主机上的此路径中/backup/mongo/la
- 使用卷装载大文件。假设您正在使用以下命令运行docker容器
/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
为其创建卷
要验证大文件是否在容器内,可以使用以下命令(假设容器名称为mongodb):
- 从本地计算机连接到VPS上的容器。正如您在评论中提到的,您可以使用位于计算机中的gui应用程序进行导入。在这种情况下,你需要考虑以下内容:
- 从Mongo3.6开始,它不会被公开。因此,您需要使用附加到
命令末尾的docker run
告诉它要公开,但我不建议使用此方法,因为它不安全。或者您可以使用SSH隧道将您连接到容器IPmongod--bind_ip 0.0.0
- 从Mongo3.6开始,它不会被公开。因此,您需要使用附加到
我的最终建议是遵循第一种方法,因为该文件已在VPS上可用,无需再次上载。可能适合的解决方案:
- 使用卷装载大文件。假设您正在使用以下命令运行docker容器
/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
为其创建卷
要验证大文件是否在容器内,可以使用以下命令(假设容器名称为mongodb):
- 从本地计算机连接到VPS上的容器。正如您在评论中提到的,您可以使用位于计算机中的gui应用程序进行导入。在这种情况下,你需要考虑以下内容:
- 从Mongo3.6开始,它不会被公开。因此,您需要使用附加到
命令末尾的docker run
告诉它要公开,但我不建议使用此方法,因为它不安全。或者您可以使用SSH隧道将您连接到容器IPmongod--bind_ip 0.0.0
- 从Mongo3.6开始,它不会被公开。因此,您需要使用附加到
我的最终建议是采用第一种方法,因为VPS上已经有文件,无需再次上传。因此,我想装载包含该大文件的卷不会是一种选择,因为它需要重建容器,这可能会导致停机几秒钟?我甚至不知道如何做到这一点。我已经设法从docker hub repo下载docker映像,并已安装和运行,但我不知道使用什么命令连接到容器,然后导入JSON文件。因此我提出了这个问题。如果我能够从我的桌面计算机远程连接到NoSQLBooster for MongoDB的docker容器,我可以从那里使用导入功能,但也不能这样做,因为我找不到任何关于如何操作的信息。我理解,我将尝试写一个详细的答案,让我们看看它是否适合您的情况。因此,我想装载包含该大文件的卷不会是一个选项,因为它需要重建容器,这可能会导致停机几秒钟?我甚至不知道如何做。我已经设法从docker hub repo下载docker映像,并已安装和运行,但我不知道使用什么命令连接到容器,然后导入JSON文件。所以我有一个
docker run --name mongodb -v /backup/mongo:/home/ -v /path/to/my/script:/docker-entrypoint-initdb.d/ mongo:latest
docker exec -it mongodb bash