Docker容器运行以前版本的代码

hgc7kmma  于 2023-04-11  发布在  Docker
关注(0)|答案(3)|浏览(148)

我还在学习如何使用Docker。我试图将Docker添加到我的Sping Boot 应用程序中,但它并不像我预期的那样顺利。
一开始,我有一个端点返回'Hello,World'。我用Docker运行应用程序,它工作了。然后,我删除了这个端点并添加了另一个端点。之后,我在应用程序中添加了一个PostgreSQL数据库并再次用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
6jygbczu

6jygbczu1#

你没有说你是如何启动容器的。我猜你只是在使用docker compose up。然后你需要更新镜像:删除“旧”映像或重建

docker compose build

docker compose up之前或简单地

docker compose up --build
jq6vz3qz

jq6vz3qz2#

这似乎是一个docker缓存问题,在你的docker文件中:

COPY ./target/demo-0.0.1-SNAPSHOT.jar app.jar

由于这一行没有更改其名称,docker假设您的docker镜像没有更改,因此不考虑docker构建步骤。
要避免此问题,必须使用以下开关运行容器:

docker-compose up –no-cache
bwntbbo3

bwntbbo33#

Docker镜像可能无法重建:如果您在运行docker build后对Sping Boot 应用进行了更改,则这些更改可能尚未合并到Docker映像中。请确保在对应用进行更改后再次运行docker build
Docker镜像可能没有运行最新版本的应用:如果您正在运行带有docker run的Docker镜像,请确保使用--rm标志删除
否则,您可能正在运行旧版本的应用。
Docker容器可能没有链接到正确的数据库:如果您向应用添加了PostgreSQL数据库,而Docker容器没有正确链接到该数据库,则可能会出现意外行为。请仔细检查您的application.properties文件(或等效文件)是否具有正确的数据库凭据,以及Docker容器是否链接到正确的端口。
要进一步排除故障,您可以尝试运行docker ps以验证容器是否正确运行,然后运行docker logs以查看可能已记录的任何错误消息。

docker-compose up --build

来重建镜像并启动容器。

相关问题