如何删除多个 docker 具有相同 imageID 的图像?

How to remove multiple docker images with the same imageID?

我创建了一个 local docker registry,然后从 docker 集线器中提取了一些我的 docker 图像,然后将它们推送到本地注册表。现在我想删除我的本地图像。但这里的问题是 imageID 个图像是相同的,我无法删除它们。我搜索了解决方案,但找不到解决方案。

>> docker images

REPOSITORY                     TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
localhost:5000/[repo1]        v-0.9.1              810001cb03af        4 weeks ago         594.6 MB
[myaccount]/[repo1]           v-0.9.1              810001cb03af        4 weeks ago         594.6 MB

如您所见,两张图片的 image ID 相同。我怎样才能删除它们?

编辑

这是一种方法:

如果图像 id 相同,可以将存储库和标签数据提供给 "docker rmi" 命令以删除图像。

命令

docker rmi [repository_name1]:[tag1] [repository_name2]:[tag2]

例子

docker rmi test-nginx:latest ubuntu:latest

注意:需要适当地命名和标记图像才能有效地使用上述命令来满足问题中提到的要求。

参考 Docker 文档以获得 "docker rmi" 命令帮助:here

这里有一种方法可以做到这一点。 运行 命令:

docker images | grep 810001cb03af | awk '{print  ":" }' | xargs docker rmi

其中 810001cb03af 是您的图片 ID。

我刚刚查看了 Docker 文档,我认为这也是可以做到的

rmi

您可以使用图像的短 ID 或长 ID、标签或摘要来删除图像。如果一张图片有一个或多个标签或摘要引用,您必须在删除图片之前将它们全部删除。

因此,除了使用 ID,您还可以这样做 ---

$ docker rmi test1 Untagged: test1:latest $ docker rmi test2 Untagged: test2:latest

运行 以下命令删除具有相同 IMAGE ID.

的多个 docker 图像
sudo docker rmi -f **IMAGE ID**

您应该尝试使用摘要删除图像,

    $ docker images --digests

    REPOSITORY                     TAG       DIGEST                                                                    IMAGE ID        CREATED         SIZE
    localhost:5000/test/busybox    <none>    sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf   4986bf8c1536

    $ docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
     Untagged: localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf

    Deleted: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125
    Deleted: ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2
    Deleted: df7546f9f060a2268024c8a230d8639878585defcc1bc6f79d2728a13957871b

简答:

通过 id 删除它并使用 -f 标志:

$ docker rmi -f fd484f19954f

Untagged: test1:latest
Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8

说明

这些不是具有相同 ID 的多张图片。这实际上是在多个存储库中引用的一个图像(即给定多个 names/tags)。 这种情况在 rmi command documentation

中有准确描述

You can remove an image using its short or long ID, its tag, or its digest. If an image has one or more tag referencing it, you must remove all of them before the image is removed. Digest references are removed automatically when an image is removed by tag.

给定,

$ docker images

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
test1                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
test2                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)

作为上述简短回答的替代方法,您可以一个一个地删除标签(最后一个标签实际上也会删除图像):

$ docker rmi test1:latest

Untagged: test1:latest

$ docker rmi test2:latest

Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8

您可以使用命令 docker rmi IMAGE_NAME:TAG_NAME,它会起作用。

您可以通过多种方式删除。

a) 只删除一个:

$ sudo docker rmi login(REPOSITORY NAME):latest(TAG NAME)

b) 使用 -f 命令删除所有具有匹配 ID 的内容:

$ sudo docker rmi -f 91dfd8adbf04(IMAGE ID)