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

自定义桥接网络的Docker容器如何使用宿主机dnsmasq作为DNS服务

问题根因

Docker内置DNS服务(127.0.0.11)默认会过滤宿主机resolv.conf中的127.0.0.0/8段地址,替换为公共DNS服务器,导致容器的内部域名请求根本不会转发到宿主机本地运行的dnsmasq服务。同时dnsmasq默认仅监听127.0.0.1回环地址,即使Docker转发了请求,dnsmasq也无法接收来自Docker桥接网段的DNS查询。

修复方案
  1. 调整dnsmasq监听配置
    首先查询自定义桥接网络的网关地址:
docker network inspect mycustomnet | grep Gateway

假设返回网关地址为172.18.0.1,修改dnsmasq.conf新增如下配置:

# 同时监听本地回环和Docker桥接网关地址
listen-address=127.0.0.1,172.18.0.1
bind-interfaces

重启dnsmasq服务生效:

systemctl restart dnsmasq

放开宿主机防火墙对Docker网段的53端口访问限制:

# 注意替换为你实际的自定义桥接网段
iptables -I INPUT -s 172.18.0.0/16 -p udp --dport 53 -j ACCEPT
  1. 修改Docker Compose配置指定DNS
    两种配置方式二选一即可:
  • 方式一:全局配置自定义网络的默认DNS
networks:
  mycustomnet:
    driver: bridge
    driver_opts:
      com.docker.network.dns: 172.18.0.1
  • 方式二:单独为服务指定DNS
services:
  mycontainer:
    networks:
      - mycustomnet
    dns:
      - 172.18.0.1
      - 8.8.8.8 # 可选备用公网DNS
  1. 重新部署服务生效
docker-compose up -d --force-recreate
DNS校验方法
  1. 进入容器执行cat /etc/resolv.conf,确认nameserver配置符合预期
  2. 执行dig test.example,返回结果的SERVER:字段即为实际响应请求的DNS服务器地址,同时可查看A记录是否返回正确结果
  3. 无dig命令时可使用nslookup test.example,输出的Address:行即为当前使用的DNS服务器地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:54:06