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
相关产品推荐
相关产品推荐

