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
相关产品推荐
相关产品推荐

