Alpine镜像安装Node.js报错RSA_get0_pss_params未找到如何解决?
问题根因
你使用的nginx:1.16.0-alpine基于老旧的Alpine 3.10版本,自带的openssl版本过低。你安装的是edge源的最新nodejs包,近期edge源的nodejs更新后依赖更高版本的openssl,而旧版openssl没有RSA_get0_pss_params这个导出符号,就会出现relocation错误,这也是为什么之前构建正常、突然报错的原因。
另外你的Dockerfile中RUN apk add --update npm属于冗余步骤,安装node时已经默认安装对应版本的npm,可以直接删除。
解决方案
任选以下任意一种方案即可修复:
方案1:使用当前Alpine版本官方源的nodejs
不用edge源,直接用当前Alpine版本自带的稳定node包,兼容性最好:
RUN apk add --no-cache libuv nodejs npm \ && echo "NodeJS Version:" "$(node -v)" \ && echo "NPM Version:" "$(npm -v)"
方案2:升级基础镜像到较新的nginx alpine版本
如果需要使用高版本node,把基础镜像换成新版本的nginx alpine,新镜像自带的openssl版本足够支持edge源的最新node:
# 替换第一行的基础镜像声明即可 FROM nginx:1.25-alpine
其余安装指令可以保持不变。
方案3:同步安装edge源的openssl包
如果既不想更换基础镜像,也想继续使用edge源的高版本node,就在安装node前先从edge源安装新版openssl:
RUN apk add --no-cache --repository http://nl.alpinelinux.org/alpine/edge/main libuv openssl \ && apk add --no-cache --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/main nodejs nodejs-npm \ && echo "NodeJS Version:" "$(node -v)" \ && echo "NPM Version:" "$(npm -v)"
内容的提问来源于stack exchange,提问作者Green
相关产品推荐
相关产品推荐

