首页 > 解决方案 > Docker 映像未更新

问题描述

我想构建一个映像并运行一个容器,但是在代码中进行了一些更改后,我使用此命令重建映像并运行容器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

这是我的码头文件

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

标签: dockerdocker-desktop

解决方案


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

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

然后再次尝试重建。

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

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


推荐阅读