如何减少Docker使用的磁盘空间?

75

我正在Windows 10上运行Docker。

我的电脑上存储了几个镜像。这些镜像的总大小累计到了约10GB左右。我使用'docker rmi -f'命令删除了这些镜像。

但是这些镜像占用的磁盘空间并没有被释放。如果我运行'docker images'命令,已删除的镜像不会列在'docker images'命令的输出中(但磁盘空间并未清理)。

如何提高(即减少)Docker使用的磁盘空间?


1
可能是如何删除旧的和未使用的Docker镜像的重复问题。 - kenorb
9个回答

103

首先尝试运行:

docker system prune

它将移除以下内容:

  • 所有已停止的容器
  • 至少没有一个容器使用过的所有卷
  • 至少没有一个容器使用过的所有网络
  • 所有悬空镜像

如果这不够,请执行以下操作:

docker system prune -a

它将移除以下内容:

  • 所有已停止的容器
  • 至少没有一个容器使用过的所有卷
  • 至少没有一个容器使用过的所有网络
  • 没有与至少一个容器关联的所有镜像

如果您没有得到您所期望的结果,请尝试以下方法

docker volume prune

它将删除所有至少没有一个容器使用过的本地卷。


3
它不起作用。即使我没有任何图像、容器或卷,它仍然显示64GB。系统清理 -a 只显示“回收的总空间: 0 B”。但是~/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2仍然是64GB。怎么可能? - ilyas Jumadurdyew
1
你可能有任何容器正在运行吗? - Artur Barseghyan
你使用Docker多久了?你尝试过docker volume prune吗? - Artur Barseghyan
是的,我尝试了各种修剪方法。唯一的解决方案是重置Docker。但这并不好,因为我会失去所有的设置、镜像、网络等(即使是工作中的)。 - ilyas Jumadurdyew
1
即使在 Docker 重启后,内存占用仍未被清除。我看到有几个 GB 的信息存储在 C:\ProgramData\docker\windowsfilter 文件夹中。 - Surya Tej
显示剩余4条评论

21

2016年第四季度更新:正如我在 "如何删除旧的和未使用的Docker镜像" 中提到的,使用以下命令:

docker image prune -a

docker system prune更精确,它将删除悬空和未使用的镜像。 警告:'未使用'表示"没有被任何容器引用的镜像":在使用-a之前要小心。然后检查镜像的磁盘空间是否相应缩小。

翻译:

参考katopz的Medium文章“如何清理Docker (~5GB垃圾!)”。

该文章提到了docker-cleanup脚本,用于删除旧的退出进程和悬空镜像。
我也有自己的别名

但是,它还提到,自Docker 1.10以来,现在有需要删除的命名卷:

docker volume rm $(docker volume ls -qf dangling=true)

我清理了超过35GB的垃圾!谢谢,特别是第二个命令..在其他地方没有看到。。 - Macindows
@Macindows 做得好。自2016年以来,还有我在 https://dev59.com/NlwY5IYBdhLWcg3wWWq0#32723127 中提到的 docker volume prune,它可以做同样的事情。 - VonC

5
在运行于WSL2的Docker桌面上的Windows中,GUI中有一个选项可以清除数据。 enter image description here 当提示选择数据存储时,请选择wsl2
注意:此选项将删除您的所有Docker数据。如果您不希望这样做,请尝试本帖中其他人提到的修剪选项。

在执行了此处所有人建议的命令后,CMD告诉我它已经释放了55GB的空间。实际上只有大约3GB被删除了。在Docker桌面中运行此操作后,我获得了91GB的可用空间。谢谢! - Frederik Nielsen

5

清理系统内存有三个步骤:

  1. 删除docker镜像
  2. 运行命令:docker system prune -a
  3. 退出docker容器应用程序

这对我很有效。在执行上述步骤后,大约清理了30GB的空间。


肯定需要退出Docker并重新启动才能回收空间,至少在我的Win10系统上是这样。 - Dean

3
除了使用docker prune -a之外,还要注意这个问题:Windows 10: Docker删除所有镜像和容器后不释放磁盘空间#244
这是一个自2016年以来一直存在且仍未解决的可怕而复杂的错误报告,但可能可以通过“故障排除”屏幕上的“清理/清除数据”功能来解决:

enter image description here

enter image description here

我刚刚使用了这个来恢复了100GB的空间。


2

我的磁盘使用了80%,但对磁盘上文件大小的计算显示只使用了约10%。

在我的情况下,清理docker缓存,卷,镜像和日志都没有帮助。但是重新启动docker服务有所帮助:

sudo systemctl restart docker

在此之后,磁盘的使用量已经达到了预期的10%。


1

如果你的空间已满,使用docker prune可能会卡住。你需要手动删除卷。


1
首先找出使用空间的原因:
docker system df 查看文档

在我的情况下,大部分空间被"构建缓存"使用,要删除它:
docker builder prune 查看文档


0

docker system prune 在我的机器上运行得非常好,我使用的是 Ubuntu 20 和 docker 20.10.2


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