首页 > 解决方案 > 从 Dockerfile 构建映像后的多个 Docker 映像

问题描述

我制作了一个 Dockerfile 来构建基于另一个 Dockerfile 的图像。它使用 Alpine Linux 作为基础。

一切正常,但是当我使用--all开关查看图像时,我得到了多个实例,这些实例似乎是我的图像和它所基于的 Alpine Linux 的图像:

$ docker image ls -a
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
<none>                    <none>              5577c25bccd9        20 hours ago        137MB
<none>                    <none>              48f944e609b5        20 hours ago        137MB
paradroid/myapp           latest              f2a0f99986a6        20 hours ago        137MB
<none>                    <none>              d846706db3f4        20 hours ago        137MB
<none>                    <none>              f1410e1d307e        20 hours ago        137MB
<none>                    <none>              e52e6203864a        20 hours ago        137MB
<none>                    <none>              dd3be52289ce        20 hours ago        5.59MB
<none>                    <none>              8559960a8bd0        20 hours ago        5.59MB
<none>                    <none>              04020d8307b3        20 hours ago        5.59MB
<none>                    <none>              fe0f1e73261c        20 hours ago        5.59MB
<none>                    <none>              12229a67b395        20 hours ago        5.59MB
alpine                    latest              cc0abc535e36        13 days ago         5.59MB

在构建它所基于的 Dockerfile 时不会发生这种情况。

docker system prune不会删除它们,任何单独删除它们的尝试都会给出以下响应:

$ docker image rm d846706db3f4
Error response from daemon: conflict: unable to delete d846706db3f4 (cannot be forced) - image has dependent child images

我怎样才能找出造成这种情况的原因?

标签: docker

解决方案


<none:none>图像是您的docker build.

Docker 镜像由层组成。Dockerfile 中的每条指令都会产生一个层。这些层在不同的图像之间重复使用。这导致磁盘空间的有效使用。因此,如果一个图层被另一个图像使用,您将无法删除该图层。

您可以运行以下命令,该命令将删除任何图像中未引用的图层。这些层称为dangling

docker rmi $(docker images -f "dangling=true" -q)

https://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/


推荐阅读