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

Dockerfile中mvn package无法更新Spring Boot Jar包的解决方法

Spring Boot容器化Dockerfile构建Jar不更新问题解决

核心问题分析

你的Dockerfile存在两个关键错误,导致容器内构建的Jar包无法被正确使用:

  • 无效的基础镜像声明:开头的FROM openjdk:11会被后续的FROM maven:3.8-jdk-11 as maven_build完全覆盖,属于冗余配置。
  • Jar包复制来源错误:COPY ${JAR_FILE} app.jar默认从本地主机文件系统复制文件,而非你在maven_build阶段生成的新Jar包。这就是为什么手动执行mvn package后构建镜像能正常工作——此时本地target目录有新Jar,Docker直接复用了本地文件;未提前构建时,要么找不到文件,要么使用旧的缓存文件。

修正后的Dockerfile

# 构建阶段:使用Maven编译打包项目
FROM maven:3.8-jdk-11 as maven_build
WORKDIR /app
COPY pom.xml .
COPY src ./src
# 可选添加-DskipTests跳过测试,加快构建速度
RUN mvn clean package -DskipTests

# 运行阶段:使用轻量OpenJDK镜像运行应用
FROM openjdk:11
WORKDIR /app
# 从构建阶段复制最新生成的Jar包到当前镜像
COPY --from=maven_build /app/target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app/app.jar"]

修正说明

  1. 采用多阶段构建:将编译打包和运行分离,构建阶段负责生成Jar,运行阶段只保留运行所需的JDK和Jar,大幅减小镜像体积。
  2. 指定复制来源:通过COPY --from=maven_build明确从构建阶段复制Jar包,确保使用的是容器内刚构建的最新产物。
  3. 添加WORKDIR:统一工作目录,让文件结构更清晰,避免路径混乱。

验证步骤

删除本地target目录,直接执行以下命令即可完成构建和运行:

docker build -t demo-app .
docker run -p 8080:8080 demo-app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:05:27