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包复制到指定位置,确保后续运行阶段能获取到最新的代码产物。
验证步骤
修正后按以下流程确认效果:
- 清理旧容器与镜像:
docker compose down -v --rmi all - 重新构建并启动:
docker compose build --no-cache && docker compose up -d - 用你之前的方法导出jar包并解压,检查代码是否已更新。
内容的提问来源于stack exchange,提问作者hontinghk
相关产品推荐
相关产品推荐

