本地正常运行的Angular应用Docker构建时npm run build --prod报错
解决Angular 8 Docker构建时的ERR_OSSL_EVP_UNSUPPORTED错误
方案1:指定兼容的Node.js版本镜像
Angular 8官方适配的Node.js版本为10.x、12.x或14.x,17及以上版本因默认启用OpenSSL 3.0会与旧版构建工具产生兼容冲突。修改Dockerfile的基础镜像为兼容版本:
# 替换高版本Node镜像为兼容版本 FROM node:14-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build --prod
方案2:临时启用OpenSSL兼容模式
若不愿更换Node版本,可在构建命令前添加环境变量,强制使用旧版OpenSSL行为:
# 修改构建命令,添加兼容参数 RUN NODE_OPTIONS="--openssl-legacy-provider" npm run build --prod
方案3:校验依赖版本匹配性
检查package.json中核心依赖版本是否与Angular 8匹配:
@angular/cli需为8.x版本webpack需为4.x版本
若存在第三方依赖后升级的情况,回退至与Angular 8兼容的版本。
完整Dockerfile示例(兼容版)
FROM node:14-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . . RUN NODE_OPTIONS="--openssl-legacy-provider" npm run build --prod # 可选:部署到nginx阶段 FROM nginx:alpine COPY --from=build /app/dist/your-app-name /usr/share/nginx/html EXPOSE 80
错误根源说明
本地运行正常是因为本地Node.js版本低于17,未启用OpenSSL 3.0;而Docker镜像使用高版本Node时,Angular 8依赖的旧版构建工具(如webpack 4、uglify-js)使用的加密算法被OpenSSL 3.0标记为不安全,从而触发ERR_OSSL_EVP_UNSUPPORTED错误。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

