如何在Docker中删除悬挂的镜像

45

1
可能是重复的问题:在Python CGI脚本中运行Docker时出现“/var/run/docker.sock: permission denied”错误。链接 - chb
5个回答

61

两个docker命令都需要使用sudo,否则docker images列表将首先以您的用户身份运行。

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

有时当你运行docker images命令时,sudo可能无法正常工作,此时你需要在一个sudo下运行整个命令:

sudo sh -c 'docker rmi $(docker images -f "dangling=true" -q)'

最近的 Docker 增加了 image prune 命令,因此此任务只需要单个 Docker 调用。

sudo docker image prune

1
感谢您的回复。但是当我使用您的命令时,显示如下:“守护进程的错误响应:冲突:无法删除6ce3b43f032e(必须强制)-该镜像正在被停止的容器90e1830602a0使用”。 - ANONYMUS
有一个容器正在运行镜像 docker ps -a,但是它已经 exited。根据提示,您需要先删除该容器,然后才能删除该镜像。 - Matt
我解决了这个问题...只是修改了命令,像这样 "sudo sh -c 'docker rmi -f $(docker images -f "dangling=true" -q)'",它起作用了...谢谢。 - ANONYMUS

32
sudo docker image prune

使用以下命令清理未使用和悬空的图像:

sudo docker image prune -a

10
错误的答案... -a, --all 删除所有未使用的镜像,而不仅仅是悬空的镜像 - Clintm
更新了答案,区分了删除未使用的图像和仅删除悬空的图像。 - Chris
1
我认为你把 docker image prunedocker system prune 混淆了。Docker文档明确指出,docker image prune 只会执行以下操作:删除所有悬空镜像。如果指定了 -a,则还将删除任何容器未引用的所有镜像。 - Chris
它还将删除未使用的图像。 - A.J.

7

为了使其在不使用 sudo 的情况下工作

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

这似乎与得票最高的答案完全相同? - Shaido
1
假设这可以在没有root权限的情况下运行,我认为缺少“sudo”使得这成为不同的答案。 - Ryan M

4

仅仅执行

docker image prune

它会要求您确认

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]

输入y,完成操作... 或使用-f以避免确认提示。

docker image prune -f

1

正如 @Matt 提到的那样,你在内部命令中缺少了 sudo。以下代码将起作用:

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

为了避免每次使用sudo,请给docker用户权限。按照以下步骤操作:
创建docker用户组。 $ sudo groupadd docker 将你的用户添加到docker用户组中。 $ sudo usermod -aG docker $USER

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