Springboot应用程序的代码更改不会反映在Docker上

bxjv4tth  于 2023-06-05  发布在  Docker
关注(0)|答案(1)|浏览(183)

我有一个在Docker中运行的Sping Boot 应用程序,它可以成功运行。问题是,当我更新我的应用程序代码时,在重建镜像并启动容器之后,代码更改不会反映在Docker上。
这是我的Dockerfile。我尝试将src文件复制到镜像中,并在构建阶段打包spring Boot 应用程序。然后将生成的jar复制到另一个阶段,并在容器启动时运行应用程序。

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 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"]

这是我为spring Boot 应用程序编写的docker-compose.yml的一部分。

services:
    container_name: springboot
    build:
      context: ./springboot-flash-cards
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - postgres
    links:
      - postgres

我已经检查了springboot容器中的代码在编辑我的代码库后没有更新。我检查的方式:

docker cp "springboot container":springboot-flash-cards-docker.jar .

java xf springboot-flash-cards-docker.jar

我尝试使用docker compose build --no-cache来防止docker build image从缓存中删除。但不管用。
预期行为:spring Boot 应用程序中的Dode更改将在重建镜像后反映出来,并在docker容器内运行。

83qze16e

83qze16e1#

感谢@DavidMaze的帮助。问题已解决。
出现问题的原因:

**docker run命令在新容器中运行一个命令,如果需要,拉取镜像并启动容器。**来自Docker文档

在原始Dockerfile中,RUN ./mvnw package -Dmaven.test.skip=true构建jar文件在容器内COPY target/*.jar springboot-flash-cards-docker.jar会将jar文件target/.jar从宿主机复制到容器中。我所期望的是移动并重命名在docker容器内构建的jar。由于代码更改后我没有在主机上打包代码,因此代码更改不会反映在docker上。
如何修复它:
使用RUN mv target/*.jar springboot-flash-cards-docker.jar代替COPY target/*.jar springboot-flash-cards-docker.jar。此命令会将容器内的target/
.jar**移动并重命名为springboot-flash-cards-docker.jar。
固定的docker文件:

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
RUN mv 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"]

相关问题