【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),避免拦截网络连接。

相关推荐
林熙蕾LXL13 小时前
进程间通信
linux
liyunlong-java14 小时前
Elasticsearch 8.5.3 + IK 分词器 + Kibana 8.5.3 一键安装
大数据·elasticsearch·jenkins
yzwlord14 小时前
【无标题】
linux·运维·rust·ssh
晚风_END14 小时前
Linux|操作系统|最新版zfs编译后的适用于centos7的rpm安装包完全离线安装介绍
linux·运维·服务器·c++·python·缓存·github
IT策士14 小时前
深入浅出:使用 Gunicorn + Nginx + Docker 将 Django 项目部署到云服务器
nginx·docker·gunicorn
jran-14 小时前
Docker 数据卷&应用部署
运维·docker·容器
jran-14 小时前
Docker dockerfile镜像制作&compose服务编排&私有仓库
java·docker·容器
黑猫学长呀14 小时前
存储宝典第4篇:存储芯片中常说的E2E是啥?
linux·单片机·嵌入式硬件·e2e·ssd·ufs·存储芯片
实心儿儿15 小时前
Linux —— 进程间通信 - system V进程间通信 - 共享内存(2)
linux·服务器
烛衔溟15 小时前
TypeScript 类实现接口
linux·ubuntu·typescript