CentOS 8 系统下的包依赖冲突问题

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 系统下的包依赖冲突问题,核心原因很明确:

  1. 系统预装了 buildah(一款容器构建工具),它依赖 系统自带的 runc 包(版本要求 ≥1.0.0-26)
  2. Docker 的 containerd.io 包会自带并替换系统原生的 runc (为了保证 Docker 运行的一致性),这就和 buildah 的依赖要求产生了冲突;
  3. 同时系统开启了「模块化过滤」,部分兼容的 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」和「依赖该 runcbuildah」;
  • 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 的场景。

操作步骤

  1. 禁用模块化过滤(临时生效,测试用)

    bash 复制代码
    yum module disable -y container-tools
  2. 更新 yum 缓存

    bash 复制代码
    yum clean all && yum makecache fast
  3. 安装 Docker(此时会自动匹配兼容的 runc 包)

    bash 复制代码
    yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io
  4. (可选)永久禁用模块化过滤

    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

关键注意事项

  1. 优先选择「方案一」,--allowerasing 是 yum/dnf 解决这类冲突的官方推荐方案,操作最简单、成功率最高;

  2. 指定 Docker 安装,避免安装最新版 Docker 带来新的依赖冲突(最新版 containerd.iorunc 的版本要求更高,冲突概率更大)或者安装ce版本也成;

  3. 卸载 buildah 不会影响系统其他功能,它只是一个可选的容器构建工具,和 Docker 功能重叠,无需担心系统稳定性;

  4. 若执行命令后仍有报错,可尝试添加 --nobest 参数(跳过「最佳候选包」限制),完整命令:

    bash 复制代码
    yum install -y --allowerasing --nobest docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io

总结

  1. 核心问题:buildah 依赖系统 runc,与 Docker 的 containerd.io 自带 runc 冲突;
  2. 最优解:使用 --allowerasing 参数一键替换冲突包,快速安装指定版本 Docker 20.10.0;
  3. 验证关键:安装后通过 docker --versiondocker run hello-world 确认 Docker 正常运行;
  4. 避坑点:指定 Docker 版本安装,避免最新版带来额外依赖冲突。

END

如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟

相关推荐
AI+程序员在路上32 分钟前
CAN 总线与 Linux SocketCAN C 语言测试程序
linux·c语言·网络
Predestination王瀞潞35 分钟前
4.3.3 存储->微软文件系统标准(微软,自有技术标准):VFAT(Virtual File Allocation Table)虚拟文件分配表系统
linux·microsoft·vfat
HalvmånEver35 分钟前
Linux:socket套接字编程的基础概念
linux·运维·服务器
二进制person1 小时前
JavaEE初阶 --网络初识
运维·服务器·网络
IMPYLH1 小时前
Linux 的 cp 命令
linux·运维·服务器
@syh.2 小时前
【linux】多线程
linux
贝锐2 小时前
立航货运携手贝锐向日葵,大型物流园区如何进行远程运维升级
运维·远程
RisunJan2 小时前
Linux命令-man(查看Linux中的指令帮助)
linux·运维·服务器
REDcker2 小时前
CentOS 与主流 Linux 发行版:版本与时间表(年表)
linux·运维·centos
bai_lan_ya2 小时前
使用linux的io文件操作综合实验_处理表格
linux·服务器·算法