如何删除具有相同imageID的多个Docker镜像?

59

我创建了一个本地docker仓库,然后从Docker Hub上拉取了一些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 是相同的。我该如何删除它们?

编辑

  • 我的Docker版本:

    Docker version 1.8.2,build 0a8c2e3

  • docker rmi 810001cb03af 的输出:

    守护程序错误响应:冲突,无法删除图像810001cb03af,因为它在多个存储库中标记了使用-f来强制使用失败:[810001cb03af]

  • 如果我执行 docker rmi -f 81000 ,它将删除它们,并且我需要重新拉取。


docker rmi 810001cb03af 返回什么?您使用的 Docker 版本是什么? - VonC
@VonC 我更新了我的问题。我的Docker版本是1.8.2。执行docker rmi 8100的输出已添加。 - Hadi
@Constantine:所提供的答案是否解决了您的问题?反馈对于任何阅读此问题或将来可能遇到类似问题的人都是有帮助的。 - spectre007
@VonC,恐怕不行!如果我找到解决办法,我会去做的。谢谢你的提醒 :) - Hadi
8个回答

77

以下是一种做法。运行以下命令:

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

其中 810001cb03af 是您的图像 ID。


4
您的方法将删除两张图像。我只想删除本地的那一张。 - Hadi
所以你只想下载一张图片,而不是两张?这样行得通吗? 'docker rmi localhost:5000/[repo1]' - user2707671
出现错误:grep: 'grep' 不被识别为 cmdlet 的名称 - Manjeet Singh Chauhan
@ManjeetSinghChauhan 如果你没有安装grep,那么这将无法工作。我还没有检查过在Windows上如何做到这一点。也许可以使用Cygwin或BashOnWindows? - user2707671
非常有用。在删除数十张图片时,这对我很有帮助。我使用了“docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi -f”来获取容器ID。 - Shirish Hirekodi
只是想提一下 xargs 在此处很重要。运行在macOS Mojave上。如果没有 xargs,则 docker images 的输出会包含换行符\n,从而导致错误:Error: No such image: 16b02dc3a7bd<new line here>2b1ffacfe38f - Shawn

45

下面是一种方法:

如果镜像的ID相同,可以向"docker rmi"命令提供仓库和标签数据以删除镜像。

命令

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

例子

docker rmi test-nginx:latest ubuntu:latest

注意:为了有效地满足问题中提到的要求,需要适当命名和标记图像。

有关“docker rmi”命令的帮助,请参考 Docker 文档:此处


正是我所需要的。谢谢! - wogsland
1
链接已失效。请尝试访问 https://docs.docker.com/engine/reference/commandline/rmi/。 - Simeon G

29

简短回答:

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

$ docker rmi -f fd484f19954f

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

解释

这些不是具有相同ID的多个图像。实际上,这是一个图像,在多个存储库中引用(即赋予多个名称/标签)。

此场景在 rmi 命令文档 中有详细描述。

您可以使用短或长ID、标签或摘要来删除图像。如果一个图像有一个或多个引用它的标签,则必须先删除所有标签,然后才能删除该图像。当通过标签删除图像时,摘要引用会自动删除。

给定,

$ 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 test1:[tagNumber] - user666
1
是的,只有“latest”标签可以省略,因为它是默认标签。任何其他标签都必须明确指定。我已经添加了标签以使答案更通用。 - Ahmad Abdelghany

8
运行以下命令以删除具有相同IMAGE ID的多个Docker镜像。
sudo docker rmi -f **IMAGE ID**

1
你可以使用命令 docker rmi IMAGE_NAME:TAG_NAME 进行操作。

1
有多种方式可以删除。
a) 仅删除一个:
$ sudo docker rmi login(REPOSITORY NAME):latest(TAG NAME)
英译中:

b) 使用-f命令删除所有匹配的id:

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

0

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

rmi

您可以使用短或长ID、标签或摘要来删除图像。如果一个图像有一个或多个标签或摘要引用,则必须在删除图像之前删除所有引用。

所以,与其使用ID,您可以像这样做---

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


是的,我试过了... 当你执行 docker rmi [myaccount]/[repo1] 它会显示... Untagged: [myaccount]/[repo1] 并且会删除该镜像...我希望这正是你想要的内容。 - Chetan Sharma

0

你应该尝试使用摘要来删除图片,

    $ 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接