From 59297ec52f85e507214f6a127c181f992947b4dd Mon Sep 17 00:00:00 2001 From: WrBug Date: Wed, 21 Jan 2026 04:06:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Dockerfile=20?= =?UTF-8?q?=E5=9C=A8=20BUILD=5FIN=5FDOCKER=3Dfalse=20=E6=97=B6=E6=89=BE?= =?UTF-8?q?=E4=B8=8D=E5=88=B0=E5=89=8D=E7=AB=AF=E4=BA=A7=E7=89=A9=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在构建阶段先从构建上下文复制外部产物 - 如果 BUILD_IN_DOCKER=true,编译会覆盖外部产物 - 如果 BUILD_IN_DOCKER=false,使用已复制的外部产物 --- Dockerfile | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index b7d3e45..db6d348 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,12 +30,20 @@ RUN if [ "$BUILD_IN_DOCKER" = "true" ]; then \ COPY frontend/ ./ -# 条件:仅在 Docker 内部编译时执行构建 +# 如果使用外部产物,先从构建上下文复制外部编译的 dist +# 注意:如果 BUILD_IN_DOCKER=true 且本地没有 dist,这个 COPY 会失败,但会在下面编译生成 +COPY frontend/dist ./dist + +# 条件:仅在 Docker 内部编译时执行构建(会覆盖外部产物) RUN if [ "$BUILD_IN_DOCKER" = "true" ]; then \ echo "🔨 Docker 内部编译前端..."; \ npm run build; \ else \ - echo "⏭️ 跳过编译,使用外部产物"; \ + echo "⏭️ 使用外部产物"; \ + if [ ! -d "dist" ] || [ -z "$(ls -A dist 2>/dev/null)" ]; then \ + echo "❌ 错误:BUILD_IN_DOCKER=false 但找不到外部产物 frontend/dist"; \ + exit 1; \ + fi; \ fi # ==================== 阶段2:构建后端 ==================== @@ -56,12 +64,21 @@ RUN if [ "$BUILD_IN_DOCKER" = "true" ]; then \ # 复制源代码 COPY backend/src ./src -# 条件:仅在 Docker 内部编译时执行构建 +# 如果使用外部产物,先从构建上下文复制外部编译的 JAR +# 注意:如果 BUILD_IN_DOCKER=true 且本地没有 JAR,这个 COPY 会失败,但会在下面编译生成 +COPY backend/build/libs/*.jar build/libs/ + +# 条件:仅在 Docker 内部编译时执行构建(会覆盖外部产物) RUN if [ "$BUILD_IN_DOCKER" = "true" ]; then \ echo "🔨 Docker 内部编译后端..."; \ gradle bootJar --no-daemon; \ else \ - echo "⏭️ 跳过编译,使用外部产物"; \ + echo "⏭️ 使用外部产物"; \ + mkdir -p build/libs; \ + if [ -z "$(ls -A build/libs/*.jar 2>/dev/null)" ]; then \ + echo "❌ 错误:BUILD_IN_DOCKER=false 但找不到外部产物 backend/build/libs/*.jar"; \ + exit 1; \ + fi; \ fi # ==================== 阶段3:运行环境 ==================== @@ -76,6 +93,7 @@ RUN apt-get update && \ rm -rf /etc/nginx/sites-enabled/default # 从构建阶段复制文件 +# 当 BUILD_IN_DOCKER=false 时,构建阶段已经复制了外部产物 COPY --from=frontend-build /app/frontend/dist /usr/share/nginx/html COPY --from=backend-build /app/backend/build/libs/*.jar app.jar