Google Cloud Run Docker容器无法连接MongoDB Atlas问题排查
故障根因
该故障由Cloud Run侧配置错误导致,和MongoDB Atlas服务本身无关。
你测试时把连接串改错依然返回相同超时,已经能直接坐实根因:应用发出的MongoDB连接请求根本没有到达Atlas集群,在网络路由阶段就被丢弃了。
现有配置的核心问题
你虽然完成了VPC对等连接搭建、无服务器VPC访问连接器创建,但漏了两个最关键的配置:
- Cloud Run默认的VPC连接器路由规则仅会把目标为私网IP段的请求转发到VPC网络,公网目标的请求默认走Cloud Run自带的公网出口,完全不会经过你配置的VPC对等链路。而你用的MongoDB连接串默认是公网域名,解析出来的是公网IP,请求根本走不到对等链路里。
- 你没有配置对应私有DNS解析,哪怕流量走到VPC里,解析MongoDB域名依然返回公网IP,还是会绕回公网链路。
另外你贴的Atlas侧日志完全是无效信息:日志里记录的所有连接都是Atlas集群内部运维组件(MongoDB Automation Agent,用Go语言驱动)的内部心跳连接,根本没有你.NET应用发过来的请求,不要被这部分日志误导。
你之前调整的TLS1.2配置、连接超时、连接池参数,以及代码逻辑、驱动版本、Docker镜像本身都没有问题——本地运行正常已经可以证明这一点,不需要在这些层面继续排查。
修复步骤
按以下顺序调整配置即可解决:
- 打开Cloud Run服务的配置页,找到「VPC连接」相关设置,把VPC出口流量的路由规则从默认的
仅将私有IP路由到VPC改为将所有流量路由到VPC。 - 确认你创建的无服务器VPC访问连接器和Cloud Run服务处于同一地域,跨地域的连接器无法正常工作。
- 在GCP VPC内创建Cloud DNS私有托管区域,配置MongoDB Atlas VPC对等连接对应的私有域名解析规则,保证VPC内解析MongoDB连接串域名时返回的是Atlas集群的私网IP,而非公网IP。
- 检查VPC防火墙规则,双向放通Cloud Run连接器网段、VPC业务网段到Atlas VPC网段的27017端口访问权限,不要有ACL拦截。
- 配置完成后可以通过Cloud Run的调试终端执行
mongosh "<你的MongoDB连接串>"测试连通性,验证通过后再重启服务即可。
内容的提问来源于stack exchange,提问作者Haggis777
相关产品推荐
相关产品推荐

