远程连接AWS EC2 Docker容器内Mongo Router报连接被拒绝咨询
故障排查及解决方案
容器内部访问都返回连接拒绝,说明mongos进程根本没有正常启动并监听27017端口,按以下优先级排查即可定位问题:
第一步:排查mongos启动状态与日志
这是最核心的排查步骤,mongos必须先成功连接配置服务器,才会启动端口监听对外提供服务:
- 执行
docker ps -a | grep mongos51确认容器是否处于运行中状态,若状态为Exited则说明进程启动失败直接退出 - 执行
docker logs mongos51查看启动日志,90%以上的同类问题都是mongos无法连接配置服务器导致,重点核对以下配置:- 配置服务器副本集名称是否和启动命令中
configserver/前缀的configserver完全一致,大小写、拼写错误都会直接导致连接失败 - 确认
configserver41、configserver42两个域名在mongo-netDocker网络中可以正常解析,可进入容器执行ping configserver41测试连通性,解析失败的话可以直接替换为对应配置服务器容器的内网IP测试 - MongoDB官方要求配置服务器副本集最少需要3个可用节点,你当前只配置了2个节点,若副本集无法完成主节点选举,mongos也会连接失败无法启动
- 确认配置服务器已经完成
rs.initiate()初始化操作,未初始化的副本集无法对外提供服务
- 配置服务器副本集名称是否和启动命令中
第二步:确认端口监听状态
如果容器处于运行中状态,进入容器检查端口监听情况:
- 执行
docker exec -it mongos51 ss -tunlp查看是否有进程监听0.0.0.0:27017,如果没有对应的监听记录,说明mongos进程虽然未退出,但仍未完成初始化正常提供服务,继续排查日志中的报错信息即可 - 你启动命令中添加的
--bind_ip 0.0.0.0配置本身没有问题,不需要调整
第三步:版本一致性校验
确认你使用的Mongo镜像版本,和配置服务器、分片节点的Mongo版本完全一致,跨大版本的兼容性问题也会导致mongos启动失败。
内容的提问来源于stack exchange,提问作者Tom3652
相关产品推荐
相关产品推荐

