一、问题现象
在本地虚拟机部署Jenkins时,执行docker\-compose up后,Docker守护进程无法连接到官方镜像仓库

二、排查
1. 查看DNS
vi /etc/resolv.conf

打开文件,发现内容为空,无任何DNS配置,只有一行这个

初步判断是可能是因为
该文件为空 → 系统无可用DNS服务器 → 无法解析Docker官方仓库域名(registry-1.docker.io) → 拉取镜像失败。
补充:一般来说系统通过NetworkManager管理网络,默认依赖DHCP自动获取DNS,此次失败是因为DHCP分配DNS失败,导致NetworkManager生成了空的resolv.conf文件。
三、解决流程
第一步:临时配置DNS
临时配置DNS,步骤如下:
- 编辑resolv.conf文件,进入编辑模式:
bash
vi /etc/resolv.conf
- 按
i进入插入模式,粘贴国内稳定公共DNS(推荐阿里+114备用):
bash
nameserver 223\.5\.5\.5
nameserver 223\.6\.6\.6
nameserver 114\.114\.114\.114

-
保存退出:按
ESC退出编辑模式,输入:wq(w=保存,q=退出),按回车完成保存。 -
验证DNS是否生效,执行以下命令:
nslookup registry\-1\.docker\.io✅ 成功标志:输出中能解析出Docker仓库的IP地址,说明DNS配置正常;❌ 失败:若仍提示超时,检查DNS配置是否输入正确,重新编辑即可。

第二步:配置永久DNS(避免重启后被清空)
由于系统通过NetworkManager管理网络,直接修改resolv.conf会被自动覆盖,重启虚拟机后会再次变为空文件,因此需要给网卡配置永久DNS。
修改NetworkManager配置
- 确认网卡名称(一般就是ens33,或者ens什么的),查看网卡名称
bash
ip addr
这里我的是ens160

- 执行以下命令,给ens160配置固定DNS,忽略DHCP自动获取的DNS:
bash
# 给ens160设置固定DNS,忽略DHCP自动获取的DNS
nmcli connection modify ens160 ipv4.dns "223.5.5.5,223.6.6.6,114.114.114.114" ipv4.ignore-auto-dns yes
- 重启NetworkManager服务,使配置生效:
bash
systemctl restart NetworkManager
第三步:配置Docker国内镜像加速(彻底解决拉取慢/失败)
DNS配置正常后,若拉取Docker镜像仍较慢(国内访问官方源不稳定),配置国内镜像加速,大幅提升拉取速度,步骤如下:
- 编辑Docker配置文件:
bash
vi /etc/docker/daemon.json
- 粘贴以下国内镜像源配置(阿里、百度、中科大源,稳定可用):
bash
{
"registry-mirrors": [
"https://mirror.baidubce.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
}注:若daemon\.json文件已有其他配置,只需添加registry-mirrors`节点,保持JSON格式正确即可。
- 重启Docker服务,使镜像源配置生效:
bash
systemctl daemon\-reload
systemctl restart docker
第四步:重新执行docker-compose up,启动服务
所有配置完成后,重新执行拉取启动命令:
bash
docker-compose up
✅ 成功标志:镜像正常拉取,无解析超时、连接被拒绝报错,Jenkins(或其他Docker应用)正常启动。
执行成功

四、避坑注意事项
-
临时DNS配置仅临时生效,重启虚拟机后会失效,必须配置永久DNS(方案A或B),否则问题会复发;
-
国内用户务必配置Docker国内镜像加速,不仅解决拉取失败,还能大幅提升拉取速度,避免官方源访问不稳定;
-
若配置后仍无法解析,可检查虚拟机网络模式(推荐NAT模式),并确认防火墙已关闭(
systemctl stop firewalld),避免拦截网络连接。