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

相关推荐
苦青藤36 分钟前
从零搭建 WSUS 隔离网络:完整实战指南(内网离线补丁分发)
运维·windows·microsoft
Irene19913 小时前
Win11 自动更新导致 Docker Desktop 无法正常启动,Oracle SQL Developer 启动时报错
docker·更新
天天进步20154 小时前
Python全栈项目--Python自动化运维工具开发
运维·python·自动化
Soari4 小时前
Ubuntu 根分区文件系统损坏,系统启动时自动检查失败
linux·运维·ubuntu
杨云龙UP5 小时前
Oracle Health Check巡检脚本使用SOP V2.0:从HTML原始报告→生成Word专业巡检报告→交付客户_2026-06-03
linux·运维·数据库·sql·oracle·报告·巡检
广州灵眸科技有限公司5 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) Linux虚拟机准备
linux·运维·服务器
darkdragonking5 小时前
OpenEuler 22.03 ,以docker ce 安装 Milvus 及可视化工具
docker·容器·milvus
Lana学习中6 小时前
【运维杂记】连接不上远程服务器的问题处理
运维·服务器
AOwhisky6 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
Peace6 小时前
【Prometheus】
linux·运维·prometheus