为何Alpine执行apk upgrade命令不更新存在新版本的ncurses包
问题原因分析
- 你使用的
nginx:1.21.3-alpine基础镜像基于Alpine 3.14稳定版构建,默认配置的软件源是对应Alpine 3.14版本的稳定仓库,你提到的更高版本ncurses属于Alpine edge测试分支的包,默认不会被apk upgrade识别到 - 原Dockerfile的命令执行顺序存在问题:
apk add bash放在apk upgrade之前,就算提前配置了edge源,升级逻辑也可能被提前安装的依赖版本限制,无法完成ncurses的升级
修复方案
方案1:整体切换到edge分支的Alpine源
注意:edge是测试分支,稳定性不如正式稳定版,不推荐在生产环境使用
FROM nginx:1.21.3-alpine # 替换系统默认源为edge分支源 RUN sed -i 's/v[0-9]\+\.[0-9]\+/edge/g' /etc/apk/repositories \ && apk update \ && apk upgrade \ && apk add --no-cache bash
方案2:保持稳定版分支,单独指定安装edge版本的ncurses
不需要整体切换系统源,仅单独从edge源安装指定版本ncurses,可控性更高:
FROM nginx:1.21.3-alpine RUN apk update \ && apk upgrade \ && apk add --no-cache bash \ && apk add --no-cache ncurses=6.2_p20211002-r0 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
验证方式
构建镜像启动容器后,执行apk info -a ncurses即可确认版本是否符合预期。
内容的提问来源于stack exchange,提问作者Vahid
相关产品推荐
相关产品推荐

