宿主机有网、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 问题,适合个人开发机与内网服务器长期使用。

相关推荐
忍冬行者8 小时前
MongoDB 三节点副本集离线部署运维手册
运维·数据库·mongodb
爱学习的小囧8 小时前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化
eRTE XFUN9 小时前
docker 安装 mysql
mysql·adb·docker
Elastic 中国社区官方博客9 小时前
Elastic Security、Observability 和 Search 现在在你的 AI 工具中提供交互式 UI
大数据·运维·人工智能·elasticsearch·搜索引擎·安全威胁分析·可用性测试
eEKI DAND10 小时前
对Docker部署的MySQL中的数据进行备份恢复
mysql·docker·容器
东北甜妹10 小时前
Docker 瘦身
阿里云·docker·eureka
星辰_mya10 小时前
OSI 七层模型之“跨国诈骗集团”深度讲解
运维·服务器·后端·面试·架构师
贝锐10 小时前
如何破解商用安卓无人值守运维痛点,向日葵赋能数字化高效转型
运维
旷世奇才李先生11 小时前
Docker实战:容器化部署与Docker Compose集群管理(附企业级案例)
spring cloud·docker·eureka
实心儿儿11 小时前
Linux —— 基础IO - 文件描述符
linux·运维·服务器