【问题标题】:Docker images are not updatedDocker 映像未更新
【发布时间】:2021-12-27 22:44:08
【问题描述】:

我想构建一个镜像并运行一个容器,但是在对代码进行一些更改后,我使用此命令 docker-compose up --build 重建镜像并运行容器。 但是在 Docker Desktop 中的图像列表中,我看到了 Created about 6 hours ago. 但我是在 2 分钟前完成的。 我经常在重建之前删除 docker 桌面中的图像,但我发现这种行为没有改变。 唯一的出路是在重建 3-5 个镜像后完全重新安装 docker 桌面应用程序,但这太疯狂了! 有什么问题?是缓存吗? 这是我的 docker-compose

    version: '3'
services:
  attachment-loader-prim:
    container_name: attachment-loader
    build:
      context: ""
    restart: always
    image: attachment-loader:latest
    environment:
      SPRING_PROFILES_ACTIVE: "prim"
      LOGGING_LEVEL_ORG_HIBERNATE_SQL: DEBUG
      LOGGING_LEVEL_ORG_HIBERNATE_TYPE_DESCRIPTOR_SQL_BASICBINDER: TRACE
    networks:
      - loader-network
    ports:
      - 8005:8005
      - 8085:8085
      
  attachment-loader-sec:
    container_name: attachment-loader-sec
    build:
      context: ""
    restart: always
    image: attachment-loader:latest
    environment:
      SPRING_PROFILES_ACTIVE: "sec"
      LOGGING_LEVEL_ORG_HIBERNATE_SQL: DEBUG
      LOGGING_LEVEL_ORG_HIBERNATE_TYPE_DESCRIPTOR_SQL_BASICBINDER: TRACE
    networks:
      - loader-network
    ports:
      - 8006:8005
      - 8086:8086

networks:
  loader-network:
    attachable: true

这是我的 dockerfile

    FROM adoptopenjdk/openjdk11:alpine-jre
VOLUME /tmp
ARG TZ='Europe/Berlin'

RUN sed -i 's/dl-cdn.alpinelinux.org/uk.alpinelinux.org/' /etc/apk/repositories
RUN apk upgrade --update \
    && apk add -U tzdata curl jq \
    && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
    && apk del tzdata \
    && rm -rf \
    /var/cache/apk/*
RUN echo ${TZ} > /etc/timezone

ARG DEPENDENCY=build/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8005","-cp","app:app/lib/*","com.path.to.your.Application.kt"]

【问题讨论】:

  • 请edit 发帖并添加minimal reproducible example。如果我忘记了--build 标志,我就会遇到这个问题。当我包含 --build 标志时,我从未有过这种行为。
  • 所以从干净的 docker 实例开始,构建一次你的镜像。尝试docker image ls,然后更改您的代码并再次构建它,然后将docker image ls 的旧输出与新输出进行比较。有两张图片还是只有一张?
  • @DevilaN 我做到了,在更改代码并重建后,我看到相同的图像,字段为“创建:25 分钟前”,尽管我在一分钟前构建了新图像
  • 请包含您的构建命令的输出。我们需要看到构建成功并且没有被缓存。

标签: docker docker-desktop


【解决方案1】:

要强制构建没有缓存,您可以尝试使用--no-cache 选项,这将排除任何缓存选项实际发生的可能性。您还可以通过使用这些方法来强制清理所有图像

docker-compose down -v --rmi all --remove-orphans

然后再次尝试重建。

如果没有更多详细信息或查看正在使用的实际 docker-compose 文件,这是解决问题的一般尝试。

编辑:根据您展示的示例,它可能不会在 dockerfile 中为将要构建的新映像获取任何更改,然后 --build 将只使用之前构建的缓存映像。如果您有构建的输出会有所帮助,但如果 docker 没有理由构建新映像,它将跳过以支持已经存在的缓存映像。在构建中尝试 --no-cache 选项并检查您希望触发新构建的所有 COPY/RUN 参数。

【讨论】:

  • 看起来这个命令和在 Docker Desktop 中手动删除镜像的作用一样。目前看来,行为是相同的,有时图像会更新,有时不会。我的同事听说 Docker Desktop 有一些内部缓存或数据库,用于存储构建的图像。但我还没有调查这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2015-12-12
  • 2017-01-14
相关资源
最近更新 更多