如何编写连接远程服务器Docker容器内MongoDB的连接字符串?
连接远程Docker容器内MongoDB的正确方法
为什么原来的连接字符串无效
用容器名mongo作为主机名,只有在Docker内部同一个网络的容器之间才能解析生效。你是从本地连接远程服务器(IP:192.158.8.2)上的MongoDB容器,必须用服务器IP替代容器名,同时要确认容器的端口映射配置正确。
正确的连接代码示例
场景1:容器27017端口直接映射到服务器27017端口
如果启动MongoDB容器时执行过类似docker run -p 27017:27017 --name mongo mongo的命令,把容器端口和服务器端口一一对应,代码改成这样:
from pymongo import MongoClient # 替换成服务器的实际IP client = MongoClient("mongodb://192.158.8.2:27017/")
场景2:容器端口映射到服务器的自定义端口
如果启动容器时用了非默认端口映射(比如-p 27018:27017,把容器27017端口映射到服务器27018端口),连接时要指定服务器的这个自定义端口:
from pymongo import MongoClient # 注意这里的端口是服务器上的映射端口,不是容器内部的27017 client = MongoClient("mongodb://192.158.8.2:27018/")
额外要检查的点
- 远程服务器的防火墙/安全组必须开放对应的端口(比如27017或你自定义的端口),允许你的本地IP访问。
- 如果MongoDB设置了账号密码,连接字符串要加上认证信息:
mongodb://你的用户名:你的密码@192.158.8.2:端口/目标数据库名?authSource=admin - 确认MongoDB容器的配置允许远程连接:默认情况下MongoDB绑定
0.0.0.0可以接受外部连接,如果容器启动时强制绑定了127.0.0.1,则只能容器内部访问,需要修改启动参数或配置文件。
内容的提问来源于stack exchange,提问作者Got Craziness
相关产品推荐
相关产品推荐

