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

Docker部署MEAN栈应用时npm run build报ERR_OSSL_EVP_UNSUPPORTED错

问题原因及解决方法

原因

你前端Docker镜像用了node:latest(对应Node.js 19.6.0),而Angular项目的构建依赖(webpack、css-loader等)版本较旧,不兼容Node.js 17+默认启用的OpenSSL 3.0哈希算法。Node.js 17+移除了对MD4等旧哈希算法的默认支持,但旧版webpack仍在使用这些算法,导致构建时抛出ERR_OSSL_EVP_UNSUPPORTED错误。

解决方法

方法1:改用稳定的Node.js LTS版本(推荐)

将前端Dockerfile的基础镜像换成Node.js LTS版本(比如18.x或14.x,和后端保持一致也能避免版本差异问题):

# Stage 1
FROM node:18-alpine AS client_build # 或者node:14,和后端版本匹配

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm i npm@latest -g

RUN npm install 

COPY . .

RUN npm run build

# Stage 2
FROM nginx:latest

COPY --from=client_build /usr/src/app/dist /usr/share/nginx/html

COPY ./nginx.conf /etc/nginx/conf.d/default.conf

方法2:指定OpenSSL兼容模式

如果不想更换Node.js版本,在构建命令中添加环境变量,强制使用旧版哈希算法:
修改前端Dockerfile中的构建命令:

RUN NODE_OPTIONS=--openssl-legacy-provider npm run build

或者直接在项目的package.json中修改build脚本:

"scripts": {
  "build": "NODE_OPTIONS=--openssl-legacy-provider ng build"
}

方法3:升级构建依赖版本

更新项目的webpack、css-loader等依赖到支持Node.js 19的版本(注意可能需要调整项目配置,适合愿意升级依赖的场景):

npm update webpack css-loader

额外修复:docker-compose.yml语法错误

你的docker-compose.yml中version行缺少闭合引号,会导致解析错误,修正为:

version: '3.8'

services:
  angular:
    hostname: localhost
    build: city-tours-frontend
    ports:
      - 8181:80
  express: 
    build: city-tours-backend
    ports:
      - "3000:3000"
    links:
      - database

  database:
    image: mongo
    ports:
      - "27017:27017"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:55:17