如何物理删除未标记的 docker 图像

how to physically remove untagged docker images

当我 运行 命令如 sudo docker rmi me/myimage 我得到响应 ...图像未标记,但是,当我重新 运行 sudo docker 图像我可以看到这个 "untagged" 图像仍然存在,并且,如果我 运行 df -h 我可以看到实际文件仍然存在并占用文件系统 space. 我可以使用什么命令或过程来物理删除不需要的图像?

您应该能够使用 "dangling=true" 标志删除未标记的 Docker 图像:

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

来源:

https://docs.docker.com/engine/reference/commandline/images/

如果 John Petrone 解决方案不起作用,请尝试删除那些明确引用您在 运行 docker images 时看到的 IMAGE ID 的图像。您可以使用一个命令将它们全部删除

for i insudo docker 图片 | grep \ | awk '{print $3}'; do sudo docker rmi $i; done

PD:我不知道 John Petrone 的答案。它与 Docker 1.4.1

配合得很好

首先您需要删除退出的容器,然后删除悬空图像。

docker rm $(docker ps -q -f status=exited)
docker rmi $(docker images -q -f dangling=true)

毕竟,我将下面的脚本创建为 ~/bin/dclean 并一直在使用它。

#!/bin/sh

processes=$(docker ps -q -f status=exited)
if [ -n "$processes" ]; then
  docker rm $processes
fi

images=$(docker images -q -f dangling=true)
if [ -n "$images" ]; then
  docker rmi $images
fi

您可以通过图像 ID 删除单个图像...

docker images
docker rmi <image-id>

这个命令也有效

docker rmi $(docker images | grep "^<none>" | awk '{print }')

强制删除图像以放弃可能正在使用图像的已停止容器

docker rmi -f $(docker images | grep "^<none>" | awk '{print }')

此命令将从 docker 中删除所有悬空图像和容器。

docker system prune -f