先问一句:你有没有碰到过这种情况——新装了一台 Red Hat 系服务器,第一件事是想装 Docker,结果执行 yum install 就直接给我报“This system is not registered”,连 yum list 都跑不起来。就算你绕过了订阅提示,把官方源删了换成网上找的 CentOS 源,装到 Docker 的时候又可能卡在依赖冲突上,最后折腾一下午,问题其实根本不是 Docker 不会装,而是你还没搞明白手里的红帽到底是哪个版本、能用的源长什么样。
这个标题里的“一键配置 yum 源和安装 docker”,我一开始也以为只是把网上的源地址抄过来写进 .repo 文件就行。真正做完了才发现,红帽环境下的配置最值钱的地方不在命令本身,而在于分版本处理、按场景选源、提前判断哪些坑会拦路。这篇文章我会把完整的处理链路从头到尾拆给你看,包括手动配置的关键细节、RHEL 7 和 RHEL 8/9 两条安装 Docker 的不同路径、最后再给一个真正能落地的“一键脚本”思路和完整实现。
1. 先别急着抄源:红帽版本、订阅限制与Docker的三角关系
1.1 为什么新装红帽连yum install都用不了
红帽 Linux 的软件源机制其实不复杂:系统里的 /etc/yum.repos.d/ 下放着一堆 .repo 文件,每个文件指向一个软件仓库地址,yum 根据这些地址拉取 RPM 包。但和 CentOS、Rocky Linux 不一样,红帽企业版默认的仓库指向红帽自己的 CDN,这些仓库头上有授权控制。
具体表现就是你执行:
bash复制yum install -y vim
它会给你一段漫长的提示,核心意思就是:这个系统没有在订阅管理服务里注册,或者订阅已经过期,所以无法获取官方仓库里的软件。
这个设计对正版生产环境来说非常合理,官方需要控制维护版本和补丁。但如果是个人实验、内网测试、离线交付场景,你手里拿到的红帽系统往往没有企业订阅。这时候想让 yum 能用,思路就变成:把仓库指向其他来源。这也是为什么社区里会有大量“红帽换源”的教程存在。
1.2 “红帽”可能差了好几代:先确认你的系统是哪个版本
红帽系统版本跨度很大,RHEL 5、6、7、8、9 这五代之间的包管理方式、源结构、仓库地址策略差异很大。很多人配置失败的第一原因,就是拿到一个教程才发现版本对不上。
我这里强烈建议,执行任何更换源的操作之前,先做一次系统身份确认:
bash复制cat /etc/redhat-release
cat /etc/os-release
uname -r
uname -m
看三点:是几大版本、内核版本多少、CPU 架构是什么。这三个信息决定了后面所有路径选择。
以我接触过的存量环境来说:
- RHEL 5/6:太老,Docker 基本不用想了,旧内核缺少容器运行需要的 cgroup、namespace 等完整能力,如果非要跑也只能跑上古版本 Docker,不建议在生产上这么搞。
- RHEL 7:存量最大,和 CentOS 7 二进制兼容度非常高,配置源相对顺手,也是这篇文章里最成熟的一条路。
- RHEL 8/9:默认绑定 dnf,系统自带 Podman 而不是 Docker,官方源换起来要更谨慎,不能照抄 CentOS 源。
网络上经常能看到“rhel9 安装 docker-ce 失败”的帖子,绝大多数是没意识到:Docker 官方仓库里其实主要提供 linux/centos 路径,而不是 linux/rhel,它是在借 CentOS/Rocky 这类兼容发行版的仓库结构和红帽兼容。所以系统版本判断永远是第一关,而不是直接抄一段配置完事。
1.3 Docker在RHEL上没有通用安装包,只有版本分支
Docker 在 RHEL 上没有“一个包走天下”的现成方案。你在 RHEL 7 上能直接用的 docker-ce 包,到 RHEL 8 上就变成了一条“和系统自带 Podman 并存或冲突”的路线。
RHEL 7 上的 Docker 安装,大体套路是配置 Docker 官方 CentOS 仓库后:
bash复制yum install -y docker-ce docker-ce-cli containerd.io
到了 RHEL 8/9,Docker-engine 二进制本身还存在,但你怎么给它提供一套可用的基础依赖源,才是真正的
