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,避免最新版冲突)

# 安装指定版本 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,步骤更清晰,适合对系统包有严格控制的场景。

操作步骤

卸载冲突包

# 卸载 buildah 及其依赖的冲突包
yum remove -y buildah runc

安装指定版本 Docker 20.10.0

# 此时无冲突,直接安装即可
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io

方案三:禁用模块化过滤(进阶,保留系统原生包)

如果需要保留 buildah 和系统原生 runc,可以禁用 CentOS 8 的「模块化过滤」,让系统显示被屏蔽的 runc 包,从而满足依赖要求。这个方案操作稍复杂,适合需要同时使用 buildah 和 Docker 的场景。

操作步骤

  1. 禁用模块化过滤(临时生效,测试用)
    yum module disable -y container-tools
    
  2. 更新 yum 缓存
    yum clean all && yum makecache fast
    
  3. 安装 Docker(此时会自动匹配兼容的 runc 包)
    yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io
    
  4. (可选)永久禁用模块化过滤
    # 编辑yum配置文件,添加模块化过滤禁用参数
    echo "module_hotfixes=1" >> /etc/yum.conf
    

后续验证步骤(无论哪种方案,安装后都要执行)

运行

# 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 参数(跳过「最佳候选包」限制),完整命令:
    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

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐