【问题标题】:Docker creates dangling images when no running container existsDocker 在不存在运行容器时创建悬空图像
【发布时间】:2017-06-01 06:18:58
【问题描述】:

我尝试 dockerize 我的 Java 应用程序。每当我构建一个新镜像时,Docker 都会将新镜像添加到列表中,而不会删除旧镜像。我不运行图像,我只是一次又一次地构建。我认为它应该删除旧的。我错了吗?

Docker 文件

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD ./build/libs/admin-app-0.1.jar app.jar
CMD ["java","-jar","app.jar"]

命令

sudo gradle build
sudo docker build . -t admin-app:latest

结果

【问题讨论】:

    标签: docker docker-build


    【解决方案1】:

    这是完全正常的。 docker 在构建过程中创建容器并在构建最终容器后将它们丢弃。看这里 (http://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/)

    你可以通过一些 bash 行轻松删除它们。看这里 (How to remove old and unused Docker images)

    【讨论】:

    【解决方案2】:

    您以悬空图像(未标记的图像在其名称上显示<none>)结尾的原因是您使用相同的名称/标签成功构建了多次相同的图像admin-app:latest.
    在这种情况下,已经使用此标签构建的先前(旧)图像成为“悬空图像”,因为新构建的图像已替换它。 Docker 不想覆盖(删除)它,只是通过标记 <none> 来表明该图像没有名称。

    您还可以在构建失败时生成悬空图像。

    要摆脱悬空图像,您可以:

    • 每次执行构建时使用不同的标签以避免带有<none>标签的图像。
    • 使用docker rmi $(docker images -f "dangling=true" -q)删除它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 2015-04-15
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多