在 docker 中通过 daemon.json 配置 dns 服务器和搜索域是最稳定、全局生效的持久化方式,需重启守护进程生效,并可被更高优先级参数覆盖。
在 docker 中通过 daemon.json 设置 dns 服务器和搜索域,是最稳定、全局生效的持久化方式。它让所有新建容器(包括 docker run 和 docker-compose up 启动的)自动继承配置,避免每次手动加参数或重启后失效的问题。
DNS 服务器配置
指定容器默认使用的 DNS 解析服务器,解决“Temporary failure in name resolution”等常见解析失败问题:
- 编辑宿主机上的
/etc/docker/daemon.json(Linux/macOS),或通过 Docker Desktop 的 Settings → Docker Engine(Windows/macOS)修改 - 添加
"dns"字段,值为字符串数组,例如:
{"dns": ["223.5.5.5", "114.114.114.114"]} - 国内常用公共 DNS 可选:223.5.5.5(阿里)、114.114.114.114(114)、180.76.76.76(百度);海外可用 8.8.8.8、1.1.1.1
- 若文件已有其他配置(如
registry-mirrors),需合并为合法 JSON,注意逗号分隔
DNS 搜索域配置
设置搜索域后,容器内可直接用短名访问服务,比如输入 db 自动解析为 db.example.com:
- 在同一
daemon.json中添加"dns-search"字段,同样支持数组格式
{"dns-search": ["example.com", "svc.cluster.local"]} - 该配置会写入容器
/etc/resolv.conf的search行,多个域以空格分隔 - 不建议混用过长或冲突的搜索域,否则可能拖慢解析速度或导致意外匹配
生效与验证
配置完成后必须重启 Docker 守护进程才能应用:
- Linux 执行:
sudo systemctl restart docker - macOS/Windows:在 Docker Desktop 点击 Apply & Restart
- 验证是否生效:启动新容器并检查
/etc/resolv.confdocker run --rm alpine cat /etc/resolv.conf
应看到类似:
nameserver 223.5.5.5
search example.com svc.cluster.local
注意事项
这些配置是默认值,仍可被更高优先级的方式覆盖:
-
docker run --dns或--dns-search参数会完全覆盖daemon.json中对应项 -
docker-compose.yml中的dns和dns_search字段也会覆盖全局配置 - 容器内手动修改
/etc/resolv.conf属于临时行为,重建即丢失,不推荐











