基于执行的历史命令,以下是完整的 RHEL 7 系统安装 Docker 的过程总结。这个过程通过更换为 CentOS 7 的 YUM 源 ,巧妙地解决了 RHEL 7 的 $releasever 变量与阿里云 Docker 镜像路径不匹配的核心问题。
📋 安装步骤与命令解析
第 1 步:解决基础源问题
bash
# 211 - 将阿里云的 CentOS 7 仓库配置下载为系统的基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 212 - 安装 yum-utils 工具包(包含 yum-config-manager 等)
sudo yum install -y yum-utils
# 213 - 挂载本地光盘(备用,但此安装未实际使用)
mount /dev/cdrom /mnt
关键点 :第 211 行命令是解决后续问题的核心前提 。通过将系统基础源替换为 CentOS 7 的阿里云镜像,确保了 $releasever 变量被识别为 7 而非 7Server。
第 2 步:添加 Docker 仓库
bash
# 214 - 添加阿里云 Docker CE 仓库(使用 centos 路径)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
路径说明 :此命令添加的是 .../linux/centos/docker-ce.repo 而非 .../linux/rhel/docker-ce.repo,这与第一步的 CentOS 源保持一致。
第 3 步:尝试安装与问题排查
bash
# 215 - 第一次安装尝试(预期会因 $releasever 问题失败)
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 216 - 针对性修复 Docker 仓库文件中的变量
sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
# 217 - 第二次安装尝试
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
此时可能仍存在其他仓库文件(如 docker-ce-stable.repo)包含 $releasever 变量。
第 4 步:全面修复与成功安装
bash
# 218 - 清理 YUM 缓存
yum clean all
# 219 - 第三次安装尝试
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 220 - 查看当前目录文件
ll
# 221 - 批量修复所有 docker 相关的仓库文件
sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker*.repo
# 222 - 第四次安装尝试
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 223 - 最彻底的修复:替换所有仓库文件中的 $releasever
sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/*.repo
# 224 - 最终成功的安装
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
第 5 步:验证安装
bash
# 225 - 查看 Docker 版本确认安装成功
docker --version
# 226 - 查看历史命令
history
第 6 步:配置国内镜像源
bash
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://0b27f0a81a00f3560fbdc00ddd2f99e0.mirror.swr.myhuaweicloud.com",
"https://ypzju6vq.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
# 重启服务
systemctl daemon-reload
systemctl restart docker
🎯 关键技术要点
1. 问题本质
- RHEL 7 的
$releasever变量值为7Server - 阿里云镜像库的路径结构期望
7或7Server特定值 - 两者不匹配导致
404错误
2. 解决方案演变
- 初步尝试 :单独修改
docker-ce.repo文件(第216行) - 扩展修复 :批量修改
docker*.repo文件(第221行) - 彻底解决 :修改所有
*.repo文件(第223行)
3. 最优实践命令
bash
# 完整安装流程(已验证有效)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/*.repo
sudo yum clean all
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
⚡ 经验总结
- 源一致性是关键:使用 CentOS 7 源配套 CentOS 路径的 Docker 仓库,保持一致性
- 变量替换要彻底 :不仅仅是 Docker 仓库,所有仓库文件中的
$releasever都可能需要替换 - 清理缓存很重要 :在修改仓库配置后执行
yum clean all可避免缓存干扰 - 批量替换效率高 :
sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/*.repo是最可靠的修复方式
这种方法避免了复杂的仓库配置调整,通过统一系统的 $releasever 识别方式,从根本上解决了 RHEL 7 使用阿里云 Docker 镜像的兼容性问题。