Docker正在填满我的磁盘空间

问题描述 投票:11回答:6

我做了一个Docker课程来实现它,我正在尝试迁移我的第一个应用程序。在日常使用中,我发现很难跟踪我的磁盘可用空间。我注意到每次运行图像并删除时,它都不会返回原始可用空间量。

生活周期我给我的容器,从头到尾都是:docker build ...

  • docker运行CONTAINER_TAG
  • 码头停止CONTAINER_TAG
  • rm docker CONTAINER_ID
  • rmi docker image_id

自定义的容器从节点和标准redis运行。我的操作系统是OSX 10.11.6

在一天结束时,我看到我一直在失去Mbs。我究竟做错了什么? Docker这个缓存可能是我在路上错过的东西?

macos docker containers dockerfile diskspace
6个回答
10
投票

更新时间为2019-03-26

现在我们可以使用一个命令来做到这一点

docker system prune -a --volumes

警告:

默认情况下,如果当前没有使用该卷的容器,则不会删除卷以防止删除重要数据。运行命令以修剪卷时使用--volumes标志:

有关this的更多信息


25
投票

Docker存储有三个区域可以挂载,因为Docker非常谨慎 - 它不会自动删除任何区域:已退出的容器,未使用的容器卷,未使用的图像层。在具有大量构建和运行的开发环境中,可能会占用大量磁盘空间。

这三个命令清除了未使用的任何内容:

  • docker rm $(docker ps -f status=exited -aq) - 删除已停止的容器
  • docker rmi $(docker images -f "dangling=true" -q) - 删除任何图像中未使用的图像图层
  • docker volume rm $(docker volume ls -qf dangling=true) - 删除任何容器未使用的卷。

它们可以安全运行,它们不会删除图像引用的图像层或容器使用的数据卷。您可以为它们添加别名,和/或将它们放在CRON作业中以定期清理本地磁盘。


6
投票

Mac上的Docker还有一个额外的问题,它会伤害很多人:docker.qcow2文件可能会超出比例(高达64GB)并且不会自行缩减。

https://github.com/docker/for-mac/issues/371

正如djs55的一个回复中所述,这是在计划中修复,但它不是一个快速修复。引用:

.qcow2作为块设备暴露给VM,最大大小为64GiB。由于容器中的文件系统中创建了新文件,因此将新扇区写入块设备。这些新扇区被附加到.qcow2文件中,导致它的大小增加,直到最终完全分配。它达到这个最大尺寸时会停止增长。

...

我们希望在几个阶段解决这个问题:(注意这仍然处于规划/设计阶段,但我希望它能给你一个想法)

1)我们将切换到支持TRIM的连接协议,并在qcow2旁边的元数据文件中实现自由块跟踪。我们将创建一个压缩工具,可以离线运行以缩小磁盘(有点像qemu-img转换,但没有dd if = / dev / zero,它应该很快,因为它已经知道空白的位置在哪里)

2)我们将在VM重新启动时自动运行压缩工具,假设它足够快

3)我们将切换到在线压缩器(有点像编程语言中的GC)

我们还在考虑使.qcow2的最大大小可配置。也许64GiB对于某些环境而言太大了,而较小的上限会有所帮助吗?


更新2019:已经对Docker for Mac进行了许多更新,因为发布了这个答案以帮助缓解问题(特别是:支持不同的文件系统)。

虽然清理仍然不是完全自动的,您可能需要不时修剪。有关可以帮助清理磁盘空间的单个命令,请参阅zhongjiajie's answer


5
投票
docker container prune
docker system prune
docker image prune
docker volume prune

2
投票

有关如何限制docker磁盘空间的几个选项,我首先限制/旋转日志:Docker container logs taking all my disk space

例如。如果您有最近的docker版本,则可以使用每个容器的--log-opt max-size=50m选项启动它。此外 - 如果您有旧的未使用的容器,您可以考虑查看位于/var/lib/docker/containers/*/*-json.log的docker日志


2
投票

还值得一提的是,使用以下命令时,docker.qcow2(或使用Apple文件系统的High Sierra上的Docker.raw)的文件大小看起来非常大(~64GiB),比实际大。

  • ls -klsh Docker.raw

这可能会有某种误导,因为它将输出文件的逻辑大小而不是其物理大小。

要查看文件的物理大小,可以使用此命令:

  • du -h Docker.raw

资料来源:https://docs.docker.com/docker-for-mac/faqs/#disk-usage

© www.soinside.com 2019 - 2024. All rights reserved.