Docker构建的Angular+Spring Boot应用报NG0203错误(本地正常)
Docker构建Spring Boot+Angular应用触发NG0203错误
问题概述
我正在构建运行Spring Boot应用的Docker镜像,该应用托管的Angular应用被复制到static/目录。本地运行无问题,但运行Docker镜像生成的.jar文件时,Angular应用崩溃并触发NG0203错误。
错误栈信息
code: -203 message: "NG0203" originalStack: Error: NG0203 at new It (http://localhost:8081/main.17bcaa919b5eb261.js:1:330791) at new Xn (http://localhost:8081/main.17bcaa919b5eb261.js:1:349170) at Ui (http://localhost:8081/main.17bcaa919b5eb261.js:1:349987) at vr (http://localhost:8081/main.17bcaa919b5eb261.js:1:350139) at e.ɵfac [as useFactory] (http://localhost:8081/main.17bcaa919b5eb261.js:1:388552) at Object.l [as factory] (http://localhost:8081/main.17bcaa919b5eb261.js:1:478649) at yd.hydrate (http://localhost:8081/main.17bcaa919b5eb261.js:1:477685) at yd.get (http://localhost:8081/main.17bcaa919b5eb261.js:1:476263) at Pt (http://localhost:8081/main.17bcaa919b5eb261.js:1:445529) at ut (http://localhost:8081/main.17bcaa919b5eb261.js:1:445630) at useValue (http://localhost:8081/main.17bcaa919b5eb261.js:1:474526) at yd.resolveInjectorInitializers (http://localhost:8081/main.17bcaa919b5eb261.js:1:477113) at new cu (http://localhost:8081/main.17bcaa919b5eb261.js:1:516602) at Kv.create (http://localhost:8081/main.17bcaa919b5eb261.js:1:516939) at http://localhost:8081/main.17bcaa919b5eb261.js:1:538752
排查情况
- 对比本地与Docker构建生成的
<filename>.<hash>.js文件,仅变量名和文件名哈希不同,核心逻辑一致,git diff显示无实质差异 - 最终生成的
.jar文件结构正常,main.17bcaa919b5eb261.js可正常加载(无HTTP 401/404错误) - 推测问题出在Angular的容器构建环节
本地构建流程
- 执行
npm run build构建Angular应用 - 将
dist/web-client目录内容复制到Spring Boot项目的resources/static目录 - 启动Spring Boot应用,访问
http://localhost:8081可正常使用Angular应用
Docker构建四阶段
阶段1:构建OpenAPI客户端
# ##################################################################### # Stage: Build clients # - TypeScript (Angular) # ##################################################################### FROM node:18.14.2-alpine as build-clients WORKDIR /usr/src/app RUN apk add openjdk17 # +++ BUILDING CLIENTS USING OpenAPI +++ RUN npm run build
阶段2:构建Angular应用
此阶段使用的npm版本为9.5.0,ng版本为15.0.5,已确认版本正常。
# ##################################################################### # Stage: Build web client # ##################################################################### FROM node:18.14.2-alpine as build-frontend ENV NG_CLI_ANALYTICS=ci WORKDIR /usr/src/app # Install & copy dependencies COPY web-client/*.json . COPY --from=build-clients /usr/src/app .generated/cardit-api RUN npm install # Copy source code COPY web-client/src src # Build RUN npm run build
阶段3:构建最终Spring Boot JAR
# ##################################################################### # Stage: Compile final jar # ##################################################################### FROM maven:3-openjdk-17 as build-backend WORKDIR /usr/src/app # Copy server code & maven pom COPY java-backend/pom.xml . COPY java-backend/src src # Copy static website (web-client) COPY --from=build-frontend /usr/src/app/dist/web-client src/main/resources/static # Build RUN --mount=type=cache,target=/root/.m2 mvn clean install
阶段4:启动应用
# ##################################################################### # Stage: Entrypoint # ##################################################################### FROM openjdk:17-alpine as server WORKDIR /usr/src/app # {{ ENV variables }} # Copying the final jar COPY --from=build-backend /usr/src/app/target/*.jar . ENTRYPOINT java -jar *.jar
构建输出对比
本地与Docker构建输出对比图显示,两者构建日志内容基本一致,无明显异常差异。
内容的提问来源于stack exchange,提问作者Stefan Falk
相关产品推荐
相关产品推荐

