You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建React应用Docker镜像时RUN npm run build报错该如何处理?

错误根因

你遇到的ERR_OSSL_EVP_UNSUPPORTED报错是Node.js 17及以上版本的兼容性问题:Node 17开始默认使用OpenSSL 3.0,废弃了部分旧版加密算法,而你项目依赖的react-scripts内置的webpack版本较低,默认调用的哈希算法在新OpenSSL环境下不被支持,因此构建失败。

解决方案

方案1:降级使用长期支持版Node(更稳定,推荐)

将Dockerfile中的基础镜像替换为Node 16 LTS版本,该版本的OpenSSL依赖和旧版webpack兼容性更好,修改后的Dockerfile如下:

# 使用Node 16 LTS alpine镜像
FROM node:16-alpine
WORKDIR /todo-app
ENV PATH="./node_modules/.bin:$PATH"
# 复制依赖声明文件安装依赖,优化镜像构建缓存
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "start"]

方案2:保留Node 17版本,添加兼容参数

如果需要使用Node 17,可以在执行build命令前添加NODE_OPTIONS=--openssl-legacy-provider环境变量,强制使用旧版OpenSSL加密提供者兼容,修改后的Dockerfile如下:

FROM node:17.1-alpine
WORKDIR /todo-app
ENV PATH="./node_modules/.bin:$PATH"
# 复制依赖声明文件安装依赖,优化镜像构建缓存
COPY package.json package-lock.json ./
RUN npm install
COPY . .
# 执行构建时添加兼容参数
RUN NODE_OPTIONS=--openssl-legacy-provider npm run build
CMD ["npm", "start"]

注:你原有的Dockerfile缺少RUN npm install依赖安装步骤,直接复制全部文件后执行构建会找不到项目依赖,上述两个方案的Dockerfile都已经补充了这一步,同时优化了镜像构建缓存逻辑,减少后续构建的耗时。

内容的提问来源于stack exchange,提问作者Arzath Areeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:45:04