连接到 VPS 上的 MongoDB Docker 图像并导入大型 JSON 文件
Connect to MongoDB Docker image on VPS and Import large JSON file
我的 1and1 VPS 端口 27017:27017 上有一个 mongodb docker 容器 运行。容器的名称是 mongo。我需要连接到已经 运行 的容器并导入一个 11GB 的非常大的 JSON 文件(备份数据库)。请问有人知道我该怎么做吗?我尝试查看其他一些人的问题,但其中 none 个问题的答案是正确的。另外 JSON 文件已经上传到 VPS 所以我猜我需要包含正确的路径?任何帮助表示赞赏。
可能适合的可能解决方案:
- 使用卷装载大文件。假设您正在使用以下命令运行 docker 容器
docker run --name mongodb mongo:latest
并且大文件位于主机 /backup/mongo/largefile.json
上的此路径内,为了将此文件装入容器内,您需要启动一个新容器而不是已经 运行ning 的容器,因此,您可以在 运行 使用以下命令创建新容器之前自由停止旧容器:
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/
并且它将在容器第一次启动后执行。现在最后的命令将是(根据需要修改命令):
This command does not provide any data persistence to /data/db
so you need to create a volume for it using -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 应用程序来进行导入。在这种情况下,您需要考虑以下事项:
- 从Mongo3.6开始不会公开。所以你需要告诉它使用附加到
docker run
命令末尾的 mongod --bind_ip 0.0.0.0
来公开,但我不建议遵循这种方法,因为它不安全。或者您可以使用 SSH 隧道连接到容器 IP。
我最后的建议是按照第一种方法,因为文件已经在 VPS 上可用,无需再次上传。
我的 1and1 VPS 端口 27017:27017 上有一个 mongodb docker 容器 运行。容器的名称是 mongo。我需要连接到已经 运行 的容器并导入一个 11GB 的非常大的 JSON 文件(备份数据库)。请问有人知道我该怎么做吗?我尝试查看其他一些人的问题,但其中 none 个问题的答案是正确的。另外 JSON 文件已经上传到 VPS 所以我猜我需要包含正确的路径?任何帮助表示赞赏。
可能适合的可能解决方案:
- 使用卷装载大文件。假设您正在使用以下命令运行 docker 容器
docker run --name mongodb mongo:latest
并且大文件位于主机 /backup/mongo/largefile.json
上的此路径内,为了将此文件装入容器内,您需要启动一个新容器而不是已经 运行ning 的容器,因此,您可以在 运行 使用以下命令创建新容器之前自由停止旧容器:
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/
并且它将在容器第一次启动后执行。现在最后的命令将是(根据需要修改命令):
This command does not provide any data persistence to
/data/db
so you need to create a volume for it using-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 应用程序来进行导入。在这种情况下,您需要考虑以下事项:
- 从Mongo3.6开始不会公开。所以你需要告诉它使用附加到
docker run
命令末尾的mongod --bind_ip 0.0.0.0
来公开,但我不建议遵循这种方法,因为它不安全。或者您可以使用 SSH 隧道连接到容器 IP。
- 从Mongo3.6开始不会公开。所以你需要告诉它使用附加到
我最后的建议是按照第一种方法,因为文件已经在 VPS 上可用,无需再次上传。