宿主机有网、Docker 容器不能解析域名?用 daemon.json 一键配置永久 DNS

摘要

本文说明一种常见现象:宿主机可以上网,但进入 Docker 容器后 ping 域名出现 Temporary failure in name resolution。原因多与容器内 DNS 配置有关。通过在宿主机 修改 Docker 的 daemon.json 指定公共 DNS,并重启 Docker 服务,可使新建容器长期获得可用的域名解析能力。

关键词: Docker、DNS、daemon.json、Temporary failure in name resolution、Linux


一、现象描述

在容器内执行:

bash 复制代码
ping www.baidu.com

报错:

text 复制代码
ping: www.baidu.com: Temporary failure in name resolution

而宿主机上同样的命令正常;有时在容器里 ping 公网 IP (如 223.5.5.5)却是通的。

这说明:网络路由大致正常,问题集中在 DNS 解析


二、原因简述

  1. 容器内的 /etc/resolv.conf 往往由 Docker 根据宿主机环境生成。若宿主机使用 127.0.0.53 (systemd-resolved)等仅本机有效 的地址,在容器里 127.0.0.53 指向容器自身,导致解析失败。
  2. 部分环境下路由器或内网 DNS 对容器网段不友好,也会出现类似现象。
  3. 在容器里临时resolv.conf 可能立刻生效,但容器重建或重启后易被覆盖,不适合作为长期方案。

因此更稳妥的做法是:在 Docker 守护进程层面为容器指定可靠的公共 DNS。


三、解决办法:修改宿主机 /etc/docker/daemon.json

适用场景: 希望默认所有新建容器都使用固定、可用的 DNS,且由运维在宿主机统一配置。

3.1 编辑配置文件

宿主机(不是容器内)使用 root 权限编辑或创建:

/etc/docker/daemon.json

若文件已存在其他配置,需合并为合法 JSON(注意逗号),示例:

json 复制代码
{
  "dns": ["223.5.5.5", "114.114.114.114"]
}

说明:

  • 223.5.5.5114.114.114.114 为国内常用的公共 DNS,可按需换成 8.8.8.8 等。
  • 若原文件已有键(如 registry-mirrors),应写成一个对象,例如:
json 复制代码
{
  "registry-mirrors": ["https://你的镜像地址"],
  "dns": ["223.5.5.5", "114.114.114.114"]
}

3.2 重启 Docker

bash 复制代码
sudo systemctl restart docker

四、验证步骤

  1. 新建或重建一个测试容器进入 shell。
  2. 执行:
bash 复制代码
cat /etc/resolv.conf
ping -c 2 www.baidu.com

应能看到配置的 nameserver,且域名解析与 ping 正常。


五、注意事项与排错

  1. JSON 语法daemon.json 格式错误会导致 Docker 启动失败,修改后可用 sudo docker infosystemctl status docker 确认服务正常。
  2. 仅改容器内 resolv.conf :适合临时排障;永久方案 仍建议本文的 daemon.jsondocker run --dns
  3. ping IP 通、域名不通 :基本可断定是 DNS;若 IP 也不通,需再查路由、防火墙、VPN 等。
  4. IPv6 :部分环境解析到 AAAA 后走 IPv6,若仅 IPv4 异常可能表现复杂,可结合 ping -4 / dig 进一步排查。

六、小结

项目 说明
修改位置 宿主机 /etc/docker/daemon.json
核心配置 "dns": ["223.5.5.5", "114.114.114.114"]
必做操作 sudo systemctl restart docker
旧容器 重建后新 DNS 才稳定生效
典型现象 宿主机有网,容器内 Temporary failure in name resolution

可在不进入每个容器改文件的前提下,统一解决 Docker 环境的 DNS 问题,适合个人开发机与内网服务器长期使用。

相关推荐
码农多耕地呗2 小时前
VMware创建虚拟机
linux·运维·服务器
代码栈上的思考2 小时前
消息队列 BrokerServer 核心逻辑:processConnection 与请求处理全解析
运维·服务器
youyudexiaowangzi2 小时前
ubuntu 1604安装组件报错
linux·运维·ubuntu
橙露3 小时前
Docker 实战:镜像瘦身、多阶段构建与最佳实践
运维·docker·容器
TT哇3 小时前
【项目】从“本地能跑”到“生产级部署”:Java + Docker 自动化部署深度复盘
java·docker·自动化
2601_949814493 小时前
使用Kubernetes部署Spring Boot项目
spring boot·容器·kubernetes
图扑可视化3 小时前
油气集输 WebGIS 数字孪生管控大屏
运维·gis·数字孪生·油气运输·油气集输
liliangcsdn3 小时前
对基于Pydantic BaseModel的实例进行JSON序列化
人工智能·json·全文检索
CDN3603 小时前
CDN 无法播放音视频?流媒体回源与 Range 配置修复
运维·音视频