如何解决Docker/Mac磁盘空间不足错误?

77

我建立了一个相当大的镜像(1G),里面有很多用于测试的“基础设施”(Mongo,Kafka等)。

在尝试启动时,我收到设备上没有剩余空间的错误。 我该怎么办?

我清理了已停止的镜像并删除了不是绝对必要的任何镜像。

7个回答

141
如果使用Docker出现"no space left on device"错误,您可以使用"system prune"轻松解决。
我使用的是Docker for Mac 17.03版本。在Docker启动并且所有容器都运行时,执行"docker system prune -a"命令即可。这应该会给出以下对话框:
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all images without at least one container associated to them Are you sure you want to continue? [y/N]

然后按 y 键删除大量容器,最终结果(在我的情况下)为:Total reclaimed space: 23.26 GB.

现在您甚至无需重新启动 Docker 即可返回工作!


这是一个解决方案,很难想象如何增加磁盘分配空间可以成为一个解决方案,因为它仍然会留下所有那些垃圾文件。 - Machado

122

您可以在Docker for Mac的偏好设置中,在磁盘选项卡中调整虚拟磁盘镜像大小。这样可以增加空间,而不会丢失数据


在更新版本中,设置可以在资源选项卡(子选项卡"高级")中找到: Option name: Disk image size


5
取决于情况,到某个时候你的真实硬盘会变满,增加虚拟硬盘也不再是一个选项 :-) - Alexander Klimetschek
我也认为现在这应该是正确的答案。 - Patrick Klitzke
我同意这也应该是被接受的答案。我的使用情况是,我不想删除所有的构建缓存,因为我正在尝试重新编写我的Dockerfile,以便可缓存的步骤不会失效。 - leeman24
1
在我的情况下,我不得不前往资源选项卡和高级部分来更改这些设置。我的 Docker for Mac Community 版本是 4.1.7。 - Jared
1
我做了这个操作,Docker.raw 文件确实变小了,但是当我进入“关于本机”>“存储”时,没有恢复空间。虽然我将磁盘映像大小从 64GB 缩小到了 8GB,但在存储中并没有显示出被回收的空间。你有什么想法吗? - SuperCodeBrah
好的,我刚把我的硬盘空间增加到了256GB...别担心,他们说硬盘空间很便宜...但这不是一个解决方案。 - Alex Barker

15

检查你的Docker目录以找到问题所在(在MAC上可能会不同,但相同的方法可能有所帮助)

du -hs /var/lib/docker

您可以通过对/var/lib/docker子文件夹执行相同的命令来查看哪个文件夹占用了大量磁盘空间:

  • 对于/var/lib/docker/volumes:您需要删除“孤立的”卷。您还可以使用docker volume ls -qf dangling=true来检查这些孤立的卷。要删除这种孤立的卷,请执行以下命令:docker volume rm $(docker volume ls -qf dangling=true)

  • 对于/var/lib/docker/containers,您需要检查是否有许多已停止的(或正在运行的)容器,可以通过docker ps(运行中的容器)和docker ps -a(所有容器,包括运行中的和停止的)来检查。要删除已停止的容器,请执行以下命令:docker rm -v $(docker ps -aq)。标志-v将自动删除容器的卷。

  • 对于/var/lib/docker/images,您可以使用docker rmi $(docker images --filter "dangling=true" -q --no-trunc)删除所有未使用的映像。

此外,您可以在GitHub上查找一些非常有用的脚本,以删除未使用的映像/容器/卷。


2
$ du -hs /var/lib/docker du: /var/lib/docker: 没有那个文件或目录 - Awesome-o
寻找在Mac OS X上的/var/lib/docker,请参考以下链接:https://dev59.com/s1kT5IYBdhLWcg3weffR - bruce szalwinski

8

尝试增加您的磁盘空间。这是对我有效的解决方案。 Docker -> 首选项 -> 磁盘 -> 磁盘映像大小(增加它) -> 应用


2
我认为在执行 system prune 命令之前,这应该是被接受的答案。 - Islam Azab
我不知道这个。我想知道为什么Docker没有提供CLI方式来完成这个操作,而是使用UI方式。 - Joe Heyming

3

您可以在$HOME/.docker/machine/machines/default/config.json中更新虚拟机可用的硬盘大小。


你应该告诉我们需要改变什么,而不仅仅是改变所在的文件。 - undefined

2

您可以点击顶部的Docker图标,然后选择偏好设置。转到重置选项卡,然后单击删除所有数据


1
截至2021年,在用户界面中似乎不再提供此选项。 - Adam Parkin

0

您可以随时删除并重新创建boot2docker虚拟机,以确保只构建/导入所需的镜像/容器。如果您一直遇到空间问题,则可能需要为boot2docker虚拟机分配更多的空间,请参见Docker增加磁盘空间


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