【Linux】解决Docker-Compose拉取Jenkins时失败问题。

一、问题现象

在本地虚拟机部署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,步骤如下:

  1. 编辑resolv.conf文件,进入编辑模式:
bash 复制代码
  vi /etc/resolv.conf
  1. i进入插入模式,粘贴国内稳定公共DNS(推荐阿里+114备用):
bash 复制代码
 nameserver 223\.5\.5\.5
nameserver 223\.6\.6\.6
nameserver 114\.114\.114\.114
  1. 保存退出:按ESC退出编辑模式,输入:wq(w=保存,q=退出),按回车完成保存。

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

第二步:配置永久DNS(避免重启后被清空)

由于系统通过NetworkManager管理网络,直接修改resolv.conf会被自动覆盖,重启虚拟机后会再次变为空文件,因此需要给网卡配置永久DNS。

修改NetworkManager配置
  1. 确认网卡名称(一般就是ens33,或者ens什么的),查看网卡名称
bash 复制代码
ip addr

这里我的是ens160

  1. 执行以下命令,给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
  1. 重启NetworkManager服务,使配置生效:
bash 复制代码
systemctl restart NetworkManager

第三步:配置Docker国内镜像加速(彻底解决拉取慢/失败)

DNS配置正常后,若拉取Docker镜像仍较慢(国内访问官方源不稳定),配置国内镜像加速,大幅提升拉取速度,步骤如下:

  1. 编辑Docker配置文件:
bash 复制代码
vi /etc/docker/daemon.json
  1. 粘贴以下国内镜像源配置(阿里、百度、中科大源,稳定可用):
bash 复制代码
{
  "registry-mirrors": [
    "https://mirror.baidubce.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

}注:若daemon\.json文件已有其他配置,只需添加registry-mirrors`节点,保持JSON格式正确即可。

  1. 重启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),避免拦截网络连接。

相关推荐
代码AC不AC2 小时前
【Linux】关于 mmap 文件映射
linux·mmap 文件映射
kaoa0002 小时前
Linux入门攻坚——73、运维OS Provisioning阶段工具之PXE、Cobbler
linux·运维
Lugas Luo2 小时前
SATA Port Multiplier (SATA 集线器) 原理与驱动架构深度剖析
linux·嵌入式硬件
123过去2 小时前
fcrackzip使用教程
linux·网络·测试工具·安全
水月天涯2 小时前
Mac系统下制作 Ubuntu镜像(小白教程)
linux·ubuntu·macos
A.A呐2 小时前
【Linux第二十三章】传输层
linux·运维·服务器
Yupureki2 小时前
《Linux网络编程》1.网络基础
linux·运维·服务器·c语言·网络·c++
kongba0072 小时前
复刻 Claude Code 项目御马术缰绳系统 harness engineering 落地蓝图
java·linux·服务器
m0_694845572 小时前
marimo搭建教程:替代Jupyter的交互式开发工具
服务器·ide·python·docker·jupyter·github