RHEL 8.4离线安装Docker与runc冲突问题及解决咨询
问题原因
- containerd.io与系统runc的冲突本质:Docker官方的
containerd.io包内置了独立的runc二进制文件,而RHEL 8.4默认通过container-tools模块安装了系统版runc。这两个runc属于不同软件生态的实现,yum会判定为文件冲突,因此提示要替换系统版runc。 - Buildah依赖报错的真相:Buildah虽然标注依赖
runc >=1.0.0-26,但这个依赖是针对RHEL官方模块发布的runc包的,并非所有满足版本号的runc都被认可。当yum尝试替换为Docker提供的runc时,Buildah的依赖检查会因为包的提供者、归属模块不同,判定为依赖不满足,即使版本号达标。
离线安装Docker的解决方法
根据是否需要保留Buildah,分两种方案:
方案一:保留Buildah,绕过冲突安装Docker
这种方法会让系统同时保留官方runc和Docker的containerd.io,通过调整安装参数避免替换系统runc:
- 先单独安装containerd.io,加上
--setopt=obsoletes=0参数禁用包替换逻辑:yum localinstall --setopt=obsoletes=0 containerd.io-1.6.9-3.1.el8.x86_64.rpm - 再安装剩余的Docker RPM包(docker-ce、docker-ce-cli等):
yum localinstall docker-ce-*.rpm docker-ce-cli-*.rpm docker-ce-rootless-extras-*.rpm - 安装完成后,修改Docker配置文件
/etc/docker/daemon.json,指定Docker使用自身的runc:{ "runtimes": { "runc": { "path": "/usr/bin/runc" } } } - 重启Docker服务:
systemctl daemon-reload systemctl restart docker
方案二:卸载Buildah,正常安装Docker
如果不需要Buildah,可以直接卸载相关组件后安装Docker:
- 卸载Buildah及关联的container-tools模块组件:
yum remove buildah runc - 直接使用yum localinstall安装所有下载的Docker RPM包:
yum localinstall *.rpm - 启动并启用Docker服务:
systemctl start docker systemctl enable docker
验证安装
安装完成后,执行以下命令确认Docker正常运行:
docker --version docker run hello-world
内容的提问来源于stack exchange,提问作者Judy
相关产品推荐
相关产品推荐

