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

Spring Boot代码修改后Docker镜像重建仍不生效问题求助

问题分析与解决方案

你的问题核心在于Dockerfile构建阶段的jar包复制命令误用,导致新构建的代码产物没有被正确传递到最终运行镜像中。

修正后的Dockerfile

FROM openjdk:17 as buildstage
WORKDIR /app
COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
RUN ./mvnw dependency:go-offline
COPY src src
RUN ./mvnw package -Dmaven.test.skip=true
# 替换COPY为RUN cp,在镜像内部复制刚生成的jar包
RUN cp target/*.jar springboot-flash-cards-docker.jar

FROM openjdk:17
COPY --from=buildstage /app/springboot-flash-cards-docker.jar .
ENTRYPOINT ["java", "-jar", "springboot-flash-cards-docker.jar"]

问题根源

你原Dockerfile中的COPY target/*.jar springboot-flash-cards-docker.jar是错误用法:

  • Docker的COPY命令仅负责从宿主机文件系统复制文件到镜像内,无法在镜像内部完成文件复制操作。
  • 执行该命令时,宿主机的target目录要么不存在,要么是旧的构建产物,导致实际复制的不是刚打包好的新jar包,最终运行阶段始终使用旧的代码。
  • 改用RUN cp命令,才能在buildstage镜像内部将刚生成的jar包复制到指定位置,确保后续运行阶段能获取到最新的代码产物。

验证步骤

修正后按以下流程确认效果:

  1. 清理旧容器与镜像:docker compose down -v --rmi all
  2. 重新构建并启动:docker compose build --no-cache && docker compose up -d
  3. 用你之前的方法导出jar包并解压,检查代码是否已更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:32:41