Docker容器DNS配置有三种方式:全局配置通过修改/etc/docker/daemon.json并重启服务,影响所有新建容器;单容器配置使用--dns参数,优先级最高;自定义网络配置--dns实现服务发现与外网解析兼顾,需确保上游DNS支持递归查询。

全局配置:所有新容器统一走指定 DNS
适合企业内网、CI/CD 环境等需要统一策略的场景。编辑 /etc/docker/daemon.json:
{
"dns": ["192.168.10.50", "114.114.114.114"],
"dns-search": ["corp.local"],
"dns-opts": ["timeout:2", "attempts:3"]
}
保存后执行:
sudo systemctl restart docker
之后新建的容器自动生效(已运行的容器不受影响)。
单容器配置:启动时指定 DNS,优先级最高
适用于调试、临时服务或覆盖全局设置。命令中用 --dns 显式声明:
docker run --dns 192.168.10.50 --dns 8.8.8.8 -it alpine nslookup example.com
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
该方式会完全忽略 daemon.json 和自定义网络的 DNS 设置,直接写入容器的 /etc/resolv.conf。
自定义网络 + 内嵌 DNS 转发:兼顾服务发现与外网解析
当容器既要通过名字访问同网其他服务(如 db、cache),又要解析公网或内网域名时,推荐这种方式:
- 创建网络时指定上游 DNS:docker network create --dns 192.168.10.50 mynet
- 启动容器加入该网络:docker run --network mynet --name web nginx
- 此时容器
/etc/resolv.conf中是nameserver 127.0.0.11,而 Docker 内置 DNS 会把非本网络的查询(如baidu.com)转发给192.168.10.50,同时仍能解析web这类容器名
补充说明
无论哪种方式,都要确认你指定的 DNS 服务器(如 192.168.10.50)本身支持递归查询——不能只是缓存或转发代理,否则域名查不到会直接返回 NXDOMAIN 或超时。
验证是否生效,最简单方法是进容器执行:
cat /etc/resolv.conf ——看 nameserver 是否是你设的
nslookup example.com ——看能否返回 IP

















