即使没有容器正在运行也无法删除图像

问题描述 投票:0回答:10

我的机器上有多个停止的容器和图像。
我想清理并移除所有容器:

docker ps -a
不返回任何内容。
我运行
docker rmi $(docker images -q)
来删除缓存的图像,但我得到:

来自守护程序的错误响应:冲突:无法删除... (必须强制)- 图像在多个存储库中被引用

这里所说的存储库是什么?

macos docker docker-container docker-image
10个回答
150
投票

如果没有强制修饰符,您无法删除具有多个存储库的映像,请参阅 Docker docs 了解更多信息。

docker images
REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB

如果您想手动执行此操作,则必须使用图像名称删除不需要的存储库/标签,而不是使用图像ID来删除图像:

docker rmi a8e6fa672e89
Error response from daemon: conflict: unable to delete a8e6fa672e89 (must be forced) - image is referenced in multiple repositories

删除不需要的存储库/标签:

docker rmi repository/image-name:tag
Untagged: repository/image-name:tag
Untagged: repository/image-name:tag@sha256:64b5a02e2bb3ee4d4b7c0982e8e2e5eb68bdfd0fb096fce22b6c030dafb53a33

(重复最后一步,直到只剩下一个存储库/标签)现在您将能够删除图像:

docker rmi a8e6fa672e89
Untagged: repository2/image-name:tag
Deleted: sha256:a8e6fa672e89b399bd3ac52b96c031e6816a69191d1fd7e6a1839fd643e3c751
Deleted: sha256:9861dd7b5783217515f571fdcfa6729e1e38af3ae9c971026e5a317b12fc5905

如果您使用 -f 标志并指定图像的短 ID 或长 ID,则 rmi 会取消标记并删除与指定 ID 匹配的所有图像。


29
投票

它所说的“存储库”是

docker images
第一列的一部分:

docker images
REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB

(我采取了加布里埃尔在他的回答中展示的样本)

这里我们有两个存储库:“repository”和“repository2”。正如您所看到的,两个图像具有相同的 IMAGE ID。

A

docker images -q
列出所有可用的图像 ID。因此,如果您想删除由两个图像引用的图像 ID,您会收到您提到的错误。

解决方案:您可以通过名称而不是 ID 来删除图像:

docker rmi repository/image-name:tag

19
投票

要强制删除涉及多个存储库的 Docker 镜像,只需使用以下命令:

sudo docker rmi -f image_id

6
投票

根本问题是您正在尝试删除该图像,但该图像被标记为 Tarun Banda 所写的。因此,不要通过 id 删除图像,而是通过其标签删除图像。这将取消图像的标记,然后将其删除。

这里是清理旧容器的示例:

docker images | grep '3 weeks ago' | awk '{print $1 ":" $2}' | xargs -n 1 docker rmi

5
投票

您可以清理所有容器。首先,您需要使用以下命令停止所有容器:

docker stop $(docker ps -aq)
。最后,使用以下命令移除所有容器:
docker rm $(docker ps -aq)
。您只需一个命令即可完成所有操作
docker rm $(docker stop $(docker ps -aq))

如果要删除所有容器数据:

docker container prune
docker network prune
docker system prune
docker volume prune
docker builder prune

3
投票

来自守护程序的错误响应:冲突:无法删除 3472c3b5350b(必须强制)- 图像在多个存储库中引用 来自守护程序的错误响应:冲突:无法删除 3472c3b5350b(必须强制)- 图像在多个存储库中引用

如果出现此错误,请先取消图像的标记,然后将其删除。 这可以通过使用以下命令来完成。 码头工人rmi:


2
投票

如果您确定要删除所有图像,可以使用以下命令:

docker images | awk '{print $1":"$2}' | egrep -E 'REPOSITORY|TAG' | xargs -n1 docker rmi

2
投票

删除单个记录: sudo docker rmi -f

删除所有图像:
sudo docker rmi -f $(sudo docker images -a -q)

“-f”参数很重要


0
投票

只需运行此命令,它将删除所有图像

cmd:docker rmi -f $(docker images -q)


-1
投票
 docker rmi `docker images --format="{{.Repository}}:{{.Tag}}"`
© www.soinside.com 2019 - 2024. All rights reserved.