内网环境也能装 Docker?一文搞定 CentOS 离线安装 Docker CE 全流程
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-release和uname -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-cli、containerd.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-release 和 uname -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 归档仓库,然后才能正常下载依赖。
完整流程总结:
- 修复 yum 源 → 切换到 vault.centos.org 或阿里云镜像
- 在线服务器 → 添加 Docker CE 源 +
yumdownloader --resolve下载全部依赖 - 打包传输 →
tar czf压缩,拷贝到离线服务器 - 离线服务器 →
rpm -ivh安装 +systemctl start启动 - 镜像搬运 → 在线
docker save+ 离线docker load
整个流程清晰且可复现。如果你在实施过程中遇到任何问题,欢迎在评论区留言交流。如果觉得这篇文章对你有帮助,不妨分享给身边同样被内网安装困扰的同事和伙伴。
CentOS 7 已 EOL,长期方案应迁移到 Rocky Linux、AlmaLinux、RHEL 或 Ubuntu LTS,最好不要再依赖 CentOS 7。
更多推荐


所有评论(0)