为什么未出现在apk info -r依赖列表的包无法在Dockerfile中删除?
问题解答
核心原因
出现这个差异的本质是两个操作的执行时机不同,对应系统内的软件包状态完全不一样:
- 构建日志里的依赖提示,是执行
apk del命令时的状态:此时还没有安装edge源的新版本ncurses相关包,基础镜像自带的ncurses-libs 6.2_p20210612-r0确实被nginx-module-njs直接依赖,所以apk会阻止删除,输出对应的提示。 - 容器内执行
apk info -r是整个RUN指令执行完成后的状态,此时已经完成了两项变更:- 从edge源安装了更高版本的
ncurses-libs 6.3_p20211120-r0,直接替换了原有的6.2版本 - 执行
apk upgrade升级了所有可升级的包,nginx-module-njs的依赖声明也同步更新,改为通过ncurses、readline等包间接依赖ncurses-libs,不再直接依赖该包。
- 从edge源安装了更高版本的
另外你执行apk info -r ncurses-libs输出的是已经被替换的旧版本ncurses-libs-6.2_p20210612-r0的反向依赖,自然不会包含已经调整了依赖规则的nginx-module-njs。
验证方法
你可以执行以下命令确认完整依赖关系:
- 查看当前系统安装的ncurses-libs版本:
apk list --installed | grep ncurses-libs - 针对当前安装的新版本查询完整反向依赖(替换为实际安装的版本号即可):
apk info -r ncurses-libs-6.3_p20211120-r0 - 直接查询nginx-module-njs的依赖列表确认:
apk info -R nginx-module-njs
内容的提问来源于stack exchange,提问作者Vahid
相关产品推荐
相关产品推荐

