Docker CE Stable - x86_64 94 kB/s | 66 kB 00:00
错误:
问题: 安装的软件包的问题 buildah-1.19.7-1.module_el8.4.0+781+acf4c33b.x86_64
今天给自己的小玩意安装docker的时候遇到报错

通过报错我们可知,遇到的是 CentOS 8 系统下的包依赖冲突问题,核心原因很明确:
- 系统预装了
buildah(一款容器构建工具),它依赖 系统自带的runc包(版本要求 ≥1.0.0-26); - Docker 的
containerd.io包会自带并替换系统原生的runc(为了保证 Docker 运行的一致性),这就和buildah的依赖要求产生了冲突; - 同时系统开启了「模块化过滤」,部分兼容的
runc包被屏蔽,无法满足依赖要求。
下面提供 3 种解决方案,按「操作简单度」从高到低排序,优先推荐第一种(最快捷,不影响核心功能)。
方案一:直接允许替换冲突包(推荐,一步到位)
yum/dnf 提供了 --allowerasing 参数,专门用于解决这类「冲突包替换」问题,它会自动卸载冲突的旧包(系统自带的 runc、不兼容的 buildah 相关组件),同时安装 Docker 所需的包,完全满足你的需求。
操作命令(指定安装 Docker 20.10.0,避免最新版冲突)
bash
# 安装指定版本 Docker 20.10.0,允许替换冲突包
yum install -y --allowerasing docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io
说明
- 这个命令会自动卸载「与
containerd.io冲突的系统runc」和「依赖该runc的buildah」; buildah是 CentOS 8 默认预装的容器工具,和 Docker 功能重叠,卸载后不影响系统核心运行,也不影响 Docker 的使用;- 执行完成后,直接继续后续的 Docker 启动、配置步骤即可。
方案二:先卸载冲突包,再安装 Docker(稳妥,手动清理)
如果不想让系统自动替换包,可以先手动卸载冲突的 buildah 和系统原生 runc,再安装 Docker,步骤更清晰,适合对系统包有严格控制的场景。
操作步骤
卸载冲突包
bash
# 卸载 buildah 及其依赖的冲突包
yum remove -y buildah runc
安装指定版本 Docker 20.10.0
bash
# 此时无冲突,直接安装即可
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io
方案三:禁用模块化过滤(进阶,保留系统原生包)
如果需要保留 buildah 和系统原生 runc,可以禁用 CentOS 8 的「模块化过滤」,让系统显示被屏蔽的 runc 包,从而满足依赖要求。这个方案操作稍复杂,适合需要同时使用 buildah 和 Docker 的场景。
操作步骤
-
禁用模块化过滤(临时生效,测试用)
bashyum module disable -y container-tools -
更新 yum 缓存
bashyum clean all && yum makecache fast -
安装 Docker(此时会自动匹配兼容的
runc包)bashyum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io -
(可选)永久禁用模块化过滤
bash# 编辑yum配置文件,添加模块化过滤禁用参数 echo "module_hotfixes=1" >> /etc/yum.conf
后续验证步骤(无论哪种方案,安装后都要执行)
运行
bash
# 1. 启动Docker并设置开机自启
systemctl enable docker --now
# 2. 验证Docker版本是否正确(20.10.0)
docker --version
# 3. 验证Docker是否正常运行(拉取一个测试镜像)
docker pull hello-world
# 4. 运行测试容器,确认无报错
docker run hello-world
关键注意事项
-
优先选择「方案一」,
--allowerasing是 yum/dnf 解决这类冲突的官方推荐方案,操作最简单、成功率最高; -
指定 Docker 安装,避免安装最新版 Docker 带来新的依赖冲突(最新版
containerd.io对runc的版本要求更高,冲突概率更大)或者安装ce版本也成; -
卸载
buildah不会影响系统其他功能,它只是一个可选的容器构建工具,和 Docker 功能重叠,无需担心系统稳定性; -
若执行命令后仍有报错,可尝试添加
--nobest参数(跳过「最佳候选包」限制),完整命令:bashyum install -y --allowerasing --nobest docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io
总结
- 核心问题:
buildah依赖系统runc,与 Docker 的containerd.io自带runc冲突; - 最优解:使用
--allowerasing参数一键替换冲突包,快速安装指定版本 Docker 20.10.0; - 验证关键:安装后通过
docker --version和docker run hello-world确认 Docker 正常运行; - 避坑点:指定 Docker 版本安装,避免最新版带来额外依赖冲突。
END
如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟