CentOS Linux 7 已于 2024 年 6 月 30 日结束生命周期(EOL),官方不再提供安全更新。部分镜像服务随后停止维护,导致默认 yum 配置失效。本文不仅教你离线安装 Docker,还补上了 CentOS 源停服的修复方案,一文解决两个痛点。


为什么需要离线安装 Docker?

很多企业的生产服务器出于安全合规要求,被部署在与互联网完全隔离的专用网络中。这种 “断网” 环境虽然安全,但也带来了一个实际问题:无法直接使用包管理器在线安装软件

传统做法是手动逐个下载 RPM 包及其依赖,不仅耗时耗力,还经常因为依赖链不完整导致安装失败。本文将介绍一种更靠谱的方案:在有外网的机器上一次性下载所有依赖,打包后拷贝到内网服务器安装,全程无需联网。


CentOS 7 官方源已停服,先修复 yum 源!

CentOS 7 已于 2024 年 6 月 30 日正式 EOL,官方镜像站 mirrorlist.centos.org 已被关闭,所有 yum 仓库指向旧地址的命令都会报错:

Could not resolve host: mirrorlist.centos.org

在开始任何安装操作之前,必须先将 yum 源切换到归档仓库。以下提供两种方案。

方案一:切换到官方 vault 仓库(推荐)

在线服务器上执行以下命令:

# 1. 备份原有 repo 文件(重要!)
mkdir -p /root/yum-repo-backup
cp /etc/yum.repos.d/*.repo /root/yum-repo-backup/

# 2. 将所有镜像地址替换为 vault.centos.org
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo

# 3. 清理并重建缓存
yum clean all
yum makecache

说明vault.centos.org 是官方归档仓库,仅用于获取历史软件包,不再接收任何安全更新。

方案二:切换到阿里云镜像(国内速度更快)

如果在线服务器在国内网络环境下,官方 vault 仓库下载速度可能较慢。可以改用阿里云镜像:

# 1. 备份原有 repo 文件
mkdir -p /root/yum-repo-backup
cp /etc/yum.repos.d/*.repo /root/yum-repo-backup/

# 2. 替换为阿里云 CentOS Vault 镜像
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|g' /etc/yum.repos.d/CentOS-*.repo

# 3. 清理并重建缓存
yum clean all
yum makecache

阿里云 CentOS Vault 镜像地址为 https://mirrors.aliyun.com/centos-vault/,国内访问速度明显优于官方 vault。

修复验证

执行完上述任一方案后,验证 yum 是否恢复正常:

yum repolist

如果能正常列出仓库列表,说明修复成功,可以继续后续操作了。


环境准备

修复 yum 源之后,开始准备离线安装 Docker 的环境:

  • 两台 CentOS 7 服务器,操作系统版本和 CPU 架构必须完全一致
  • 一台可访问外网的服务器(下称"在线服务器"),用于下载 Docker 及其依赖
  • 一台无外网访问的服务器(下称"离线服务器"),最终安装 Docker 的目标机器

关键提醒:在线服务器和离线服务器的 CentOS 版本(如 7.9)和架构(x86_64)必须完全匹配,否则下载的软件包在离线服务器上可能无法安装。可通过 cat /etc/centos-releaseuname -m 分别确认。


第一阶段:在线服务器操作

以下步骤全部在 有外网访问权限的服务器 上执行。

1. 安装 EPEL 源

Docker 的部分依赖需要从 EPEL 仓库获取:

yum install -y epel-release

2. 添加 Docker CE 官方仓库

yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
yum makecache

这里启用了 Docker CE 的官方源,并刷新了本地缓存。

3. 下载 Docker CE 及其所有依赖

mkdir ~/docker
cd ~/docker
yumdownloader --resolve docker-ce docker-ce-cli containerd.io

--resolve 参数是关键:它会自动解析并下载 Docker CE 所需的全部依赖包,包括 docker-ce-clicontainerd.io 等。一条命令搞定整个依赖链,无需手动逐个查找。

注意:如果提示 yumdownloader: command not found,需要先安装 yum-utils

yum install -y yum-utils

4. 打包所有 RPM 文件

tar czf ~/docker.tar.gz *.rpm

将所有 RPM 包压缩成一个 docker.tar.gz 文件,方便传输。


第二阶段:离线服务器操作

docker.tar.gz 文件通过 U 盘、内网文件服务器或其他方式拷贝到离线服务器后,执行以下操作。

5. 解压并安装

mkdir docker
tar xf docker.tar.gz -C ~/docker
cd docker
yum localinstall *.rpm #可以解决依赖顺序

localinstall:yum 的子命令,表示安装本地已存在的 RPM 包(而非从远程仓库下载)

6. 启动 Docker 服务

systemctl enable docker.service
systemctl start docker.service

验证安装是否成功:

docker --version
docker info

如果正常输出了 Docker 版本信息和系统信息,说明 Docker CE 已经在内网服务器上安装完成了。


离线环境下如何处理 Docker 镜像?

Docker 装好了,但内网服务器无法通过 docker pull 拉取镜像。解决办法是:在外网机器上下载好镜像,打包导出后再导入内网

在线服务器(已安装 Docker)

docker pull jenkins/jenkins
docker save jenkins/jenkins > ~/jenkins.tar

将导出的 jenkins.tar 文件传输到离线服务器。

离线服务器

docker load < jenkins.tar
docker images

使用 docker load 导入镜像后,通过 docker images 确认镜像已存在,之后就可以像正常环境一样 docker run 运行容器了。

docker save 导出的是包含镜像所有层(layers)和元数据的完整文件,docker load 导入后会完整恢复,不会丢失任何信息。


常见踩坑与排错指南

问题一:yum 报错 “Could not resolve host: mirrorlist.centos.org”

原因:CentOS 7 已于 2024 年 6 月 30 日 EOL,官方镜像站已下线。

解决:参照本文开头的 “CentOS 7 官方源已停服” 部分,将 yum 源切换到 vault.centos.org 或阿里云镜像。


问题二:依赖包版本冲突

现象rpm -ivh 报错提示某个依赖包版本不匹配。

原因:在线服务器和离线服务器的 CentOS 小版本不一致(比如一个是 7.6,一个是 7.9),导致依赖库版本不同。

解决:确保两台机器的操作系统版本完全一致,通过 cat /etc/centos-releaseuname -m 分别确认版本号和架构。


问题三:container-selinux 版本过低

现象:安装 docker-ce 时报错,提示 container-selinux >= 2:2.74 不满足。

解决:EPEL 源中的 container-selinux 可能版本偏低。在在线服务器上额外下载:

yumdownloader --resolve container-selinux

问题四:yumdownloader 命令不存在

现象:执行 yumdownloader 时报 command not found

解决:该命令属于 yum-utils 包,在线服务器上先安装:

yum install -y yum-utils

问题五:如何验证 Docker 安装完全正常?

安装完成后,建议运行以下命令进行自检:

# 检查 Docker 服务状态
systemctl status docker.service

# 检查容器运行时
docker info | grep "Server Version"
docker info | grep "Storage Driver"

对于离线环境,无法运行 docker run hello-world(需要联网拉取),可以使用已导入的本地镜像来验证容器能否正常启动。


总结

在无外网的生产环境中安装 Docker,核心思路就是 “外网下载全量依赖,内网一次性安装”。而 CentOS 7 EOL 之后,多了一道前置工序:先把 yum 源从已停服的镜像切换到 vault 归档仓库,然后才能正常下载依赖。

完整流程总结:

  1. 修复 yum 源 → 切换到 vault.centos.org 或阿里云镜像
  2. 在线服务器 → 添加 Docker CE 源 + yumdownloader --resolve 下载全部依赖
  3. 打包传输tar czf 压缩,拷贝到离线服务器
  4. 离线服务器rpm -ivh 安装 + systemctl start 启动
  5. 镜像搬运 → 在线 docker save + 离线 docker load

整个流程清晰且可复现。如果你在实施过程中遇到任何问题,欢迎在评论区留言交流。如果觉得这篇文章对你有帮助,不妨分享给身边同样被内网安装困扰的同事和伙伴。

CentOS 7 已 EOL,长期方案应迁移到 Rocky Linux、AlmaLinux、RHEL 或 Ubuntu LTS,最好不要再依赖 CentOS 7。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐