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

Docker容器运行Spring Boot旧版本代码问题求助

问题排查:Docker运行Spring Boot应用仍加载旧版本代码

你修改了Spring Boot应用(删除旧端点、新增新端点并接入PostgreSQL),但Docker运行后还是返回旧端点的结果,新端点找不到,大概率是Docker复用了旧的构建缓存或旧jar包,按以下步骤排查:

1. 确保本地代码已重新打包

先在项目根目录执行构建命令,生成最新的jar包:

  • Maven项目:mvn clean package -DskipTests
  • Gradle项目:./gradlew clean build -x test
    执行完后检查target/demo-0.0.1-SNAPSHOT.jar的修改时间,确认是最新版本。

2. 强制清理Docker缓存并重新构建

Docker会缓存构建过程中的每一层,如果COPY的jar包文件名未变,会直接复用缓存层,不会替换新jar。需要强制重新构建:

# 使用docker-compose的情况
docker-compose build --no-cache
docker-compose up -d
# 单独用docker build的情况
docker build --no-cache -t spring-boot-app .
docker run -p 8080:8080 spring-boot-app

3. 检查并清理残留的旧容器

有时候旧容器未彻底停止,请求会被路由到旧容器导致返回旧结果:

# 查看所有运行中的容器
docker ps
# 如果有旧的app容器,停止并删除
docker stop <容器ID>
docker rm <容器ID>

完成后再重新启动新容器。

4. 本地验证jar包有效性

先在本地运行最新的jar包,确认代码修改已生效:

java -jar target/demo-0.0.1-SNAPSHOT.jar

用浏览器或接口工具访问新端点,如果本地都无法访问,说明是代码本身的问题(比如新端点注解缺失、路径写错等),和Docker无关。

附:你的配置文件

Dockerfile

FROM openjdk:17-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ./target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

docker-compose.yml

version: '3'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: pfa

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:33:17