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

相关推荐
元直数字电路验证17 小时前
云计算实验笔记(四):容器编排(Container Orchestration)
运维·笔记·docker·云计算
kukubuzai18 小时前
Docker Note
linux·运维·docker
惜年_night18 小时前
Docker部署05-GitLab的CI-CD发布
ci/cd·docker·gitlab
Ltd Pikashu18 小时前
insmod 加载内核模块 —— sys_init_module 源码剖析
linux·kernel·insmod
hj28625118 小时前
Linux网络基础一
linux·运维
杨某不才19 小时前
内网环境下,使用Docker安装Elasticsearch分词器插件
elasticsearch·docker·jenkins
小义_19 小时前
【Linux 1】
linux·运维·云原生·红帽
开开心心就好19 小时前
无弹窗不更新的PC本地播放工具
运维·科技·macos·docker·计算机外设·ocr·powerpoint
面向对象World19 小时前
Z8350 Broadcom SDIO网卡调试Ubuntu 22.04 Server版
linux·运维·ubuntu
Irissgwe19 小时前
12、多路转接 select
linux·io多路转接·select