You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内Python脚本连接MongoDB遇DNS SRV解析错误求助

Docker容器内MongoDB SRV解析失败的诊断与解决

核心定位

容器外能正常解析SRV记录,仅容器内失败,说明问题不在路由器/ISP,而是Docker容器的DNS配置异常。

诊断步骤

  1. 对比宿主机与容器的DNS配置

    • 查看宿主机DNS:cat /etc/resolv.conf
    • 查看容器默认DNS:docker run --rm alpine cat /etc/resolv.conf
      注意容器是否使用了Docker内置的127.0.0.11 DNS,部分场景下该DNS对SRV记录的支持有问题。
  2. 直接在容器内测试SRV解析
    启动带DNS工具的临时容器,执行解析测试:

    docker run --rm alpine apk add --no-cache bind-tools && dig srv _mongodb._tcp.cluster_name.abc123.mongodb.net
    

    如果返回空结果,即可确认容器内DNS无法解析目标SRV记录。

解决方法

方法1:运行容器时指定宿主机DNS

将容器的DNS服务器设置为宿主机使用的DNS(从/etc/resolv.conf中获取nameserver值):

docker run --dns <宿主机DNS_IP> your-python-image

如果用Docker Compose,在配置中添加:

services:
  your-service:
    image: your-python-image
    dns:
      - <宿主机DNS_IP>

方法2:全局修改Docker默认DNS

编辑Docker守护进程配置文件/etc/docker/daemon.json(不存在则新建):

{
  "dns": ["8.8.8.8", "8.8.4.4"]
}

重启Docker服务使配置生效:

# Linux
systemctl restart docker
# macOS(Docker Desktop)
在设置中找到Docker Engine,修改后点击"Apply & Restart"

后续新建的所有容器都会使用指定的公共DNS。

方法3:排查容器网络模式

尝试用host网络模式运行容器(仅用于排查,不推荐生产环境):

docker run --network host your-python-image

如果此模式下能正常连接,说明自定义容器网络的DNS配置存在问题,需检查网络的DNS参数。

额外排查项

  • 确认容器内环境变量正确注入了MongoDB连接字符串,没有拼写错误
  • 检查容器是否有防火墙规则或代理配置拦截了DNS请求

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:05:14