如何在GCP两台虚拟机之间建立到MongoDB Docker容器的连接
GCP两台虚拟机跨机访问Docker部署MongoDB的实现方案
1. 配置MongoDB所在虚拟机(COS系统)的暴露规则
- 修正MongoDB容器启动参数,添加端口映射,将容器27017端口绑定到宿主机端口,启动命令参考:
docker run -d \ -p 27017:27017 \ --name mongodb \ -e MONGO_INITDB_ROOT_USERNAME=root \ -e MONGO_INITDB_ROOT_PASSWORD=你自己设置的密码 \ mongo:5.0.4
如果之前已经启动过容器,需要删除原有容器后重新执行上述命令。
- 配置GCP VPC防火墙入站规则:允许第二台虚拟机的内网IP访问第一台虚拟机的27017端口,源IP范围填写第二台虚拟机的内网IP即可,不要开放到公网避免安全风险。COS系统本身的iptables规则会由Docker自动适配,无需额外手动修改。
2. 配置Python脚本所在虚拟机
- 先测试网络连通性,在第二台虚拟机上执行命令验证端口可达:
nc -zv <第一台虚拟机内网IP> 27017
返回succeeded即为连通正常。 - 安装MongoDB Python驱动:
pip install pymongo
3. 构造MongoDB连接URL
- 若你设置了MongoDB账号密码,连接URL格式为:
mongodb://<账号>:<密码>@<第一台虚拟机内网IP>:27017/?authSource=admin - 若未设置账号密码(不推荐生产环境使用),连接URL格式为:
mongodb://<第一台虚拟机内网IP>:27017/
注意:优先使用同VPC内网IP访问,流量无需走公网,速度更快、安全性更高且不产生公网流量费用。
4. Docker是否会拦截连接的说明
- 只要正确配置了
-p 27017:27017端口映射,Docker不会拦截访问请求:Docker会自动在宿主机iptables中添加端口转发规则,允许外部请求访问映射到宿主机的容器端口。 - 未配置端口映射时,MongoDB端口仅在Docker内部容器网络中暴露,宿主机和外部机器都无法访问,不属于拦截行为,是端口未对外暴露导致的。
连接测试示例代码
from pymongo import MongoClient # 替换为你自己的连接URL client = MongoClient("mongodb://root:mypassword@10.128.0.8:27017/?authSource=admin") # 打印所有数据库名称,验证连接成功 print(client.list_database_names())
内容的提问来源于stack exchange,提问作者Corgam
相关产品推荐
相关产品推荐

