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

相关推荐
Zhang~Ling9 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind9 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森9 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot10 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
重生的黑客11 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
风曦Kisaki12 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
骑上单车去旅行12 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻12 小时前
Linux 常用命令
linux
期待着201312 小时前
docker 安装 ,在centos7.9
运维·docker·容器
ShirleyWang01214 小时前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s