centos8宿主机fedora33容器内dnf命令执行失败如何解决?
错误原因
该报错为间接分支跟踪(IBT,Intel CET安全特性的核心组件)的跨版本兼容问题:
CentOS 8 默认搭载的 5.4 及更低版本内核不支持IBT特性,而Fedora 33官方镜像内的libffi.so.6 库编译时开启了IBT强制校验,在不支持该特性的旧内核上加载就会触发该错误,所有依赖该库的dnf、Python相关命令都会运行失败。
修复方案
根据你的使用场景可以选择以下任意一种方案:
- 方案1:手动替换容器内libffi包(无需修改宿主机,临时运行场景优先选择)
- 在可联网环境下载Fedora 33 适配的无IBT编译版本的libffi RPM包,推荐使用
libffi-3.3-4.fc33.x86_64版本,该版本未开启IBT校验 - 使用容器文件拷贝命令将RPM包传入容器内:
docker cp ./libffi-3.3-4.fc33.x86_64.rpm <容器ID/容器名称>:/tmp/ - 交互模式进入容器,执行rpm命令直接安装该包:
rpm -Uvh --replacefiles /tmp/libffi-3.3-4.fc33.x86_64.rpm - 执行
dnf --help验证,正常输出帮助信息即修复完成
- 在可联网环境下载Fedora 33 适配的无IBT编译版本的libffi RPM包,推荐使用
- 方案2:升级宿主机内核(长期运行多版本容器场景选择)
将CentOS 8宿主机的内核升级到5.18及以上版本,开启IBT支持后,所有默认开启IBT编译的高版本发行版容器都可以正常运行,无需单独修改容器配置 - 方案3:构建镜像时预先替换libffi(新构建容器场景选择)
编写Dockerfile时,在执行dnf相关命令前,先通过ADD指令传入兼容版本的libffi包并执行rpm安装,避免后续构建步骤报错
内容的提问来源于stack exchange,提问作者ambharesh venkatraman
相关产品推荐
相关产品推荐

