Node.js 18环境下React Docker镜像运行出现ERR_OSSL_EVP_UNSUPPORTED错误求助
错误原因与解决方法
错误原因
这个ERR_OSSL_EVP_UNSUPPORTED报错确实和Node版本直接相关:Node.js 17及以上版本默认启用OpenSSL 3.0,该版本废弃了部分旧哈希算法;而你的React项目依赖的webpack(或react-scripts)版本较老,仍在调用这些已被废弃的算法,导致加密哈希创建失败,触发该错误。
解决方法
方法1:添加环境变量兼容旧算法
修改Dockerfile,通过设置NODE_OPTIONS让Node使用旧加密提供器,有两种实现方式:
- 方式一:直接在启动命令中注入环境变量
FROM node:18-alpine EXPOSE 3000 WORKDIR /app COPY ./frontend/package.json . RUN npm install COPY ./frontend . COPY ./images . CMD ["sh", "-c", "NODE_OPTIONS='--openssl-legacy-provider' npm start"]
- 方式二:提前设置全局环境变量
FROM node:18-alpine EXPOSE 3000 WORKDIR /app ENV NODE_OPTIONS="--openssl-legacy-provider" COPY ./frontend/package.json . RUN npm install COPY ./frontend . COPY ./images . CMD ["npm", "start"]
方法2:降级Node版本到16.x
将Dockerfile的基础镜像换成Node 16的alpine版本(Node 16使用OpenSSL 1.1.1,不存在该兼容性问题):
FROM node:16-alpine EXPOSE 3000 WORKDIR /app COPY ./frontend/package.json . RUN npm install COPY ./frontend . COPY ./images . CMD ["npm", "start"]
方法3:升级项目依赖版本
如果你的项目基于create-react-app创建,升级react-scripts到v5及以上版本(该版本已兼容Node 17+的OpenSSL 3.0):
在项目的package.json所在目录执行:
npm install react-scripts@latest
执行完成后重新构建Docker镜像即可。
内容的提问来源于stack exchange,提问作者Yusuf
相关产品推荐
相关产品推荐

