Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到VPS上的MongoDB Docker映像并导入大型JSON文件_Mongodb_Docker_Vps - Fatal编程技术网

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

连接到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

我有一个mongodb docker容器在我的1和1 VPS端口27017:27017上运行。容器的名称是mongo。我需要连接到已经运行的容器,并导入一个11GB的非常大的JSON文件(备份数据库)。有人知道我怎么做吗?我试过看一些其他人的问题,但没有一个答案是正确的。而且JSON文件已经上传到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
      命令末尾的
      mongod--bind_ip 0.0.0
      告诉它要公开,但我不建议使用此方法,因为它不安全。或者您可以使用SSH隧道将您连接到容器IP


我的最终建议是遵循第一种方法,因为该文件已在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
      命令末尾的
      mongod--bind_ip 0.0.0
      告诉它要公开,但我不建议使用此方法,因为它不安全。或者您可以使用SSH隧道将您连接到容器IP


我的最终建议是采用第一种方法,因为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