【问题标题】:How to clean up Docker如何清理 Docker
【发布时间】:2020-11-20 01:59:16
【问题描述】:

我刚刚注意到我的笔记本电脑上的磁盘空间不足。 mate-disk-usage-analyzer 发现 Docker 使用了很多:

docker/aufs/diff 文件夹包含 152 个以 -removing 结尾的文件夹。

我已经运行了以下命令来清理

Kill all running containers:
# docker kill $(docker ps -q)

Delete all stopped containers
# docker rm $(docker ps -a -q)

Delete all images
# docker rmi $(docker images -q)

Remove unused data
# docker system prune

And some more
# docker system prune -af

但是截图是在我执行了这些命令之后

什么是docker/aufs/diff,为什么会占用这么多空间,我该如何清理?

我有 Docker 版本 17.06.1-ce,构建 874a737。它发生在清理之后,所以这肯定仍然是一个问题。

【问题讨论】:

标签: docker


【解决方案1】:

以下是一个激进的解决方案。 它会删除 所有您的 Docker 资料。包括卷

$ sudo su
# service docker stop
# cd /var/lib/docker
# rm -rf *
# service docker start

详情请见https://github.com/moby/moby/issues/22207#issuecomment-295754078

可能不是 /var/lib/docker

在您的情况下,泊坞窗位置可能会有所不同。您可以使用磁盘使用分析器(例如mate-disk-usage-analyzer)来查找最需要空间的文件夹。

Where are Docker images stored on the host machine?

【讨论】:

  • 这是一个暴力破解解决方案,它将删除所有容器、图像和卷。 OP 可能希望保留当前正在使用的图像和卷​​。
  • @k0pernikus 我是 OP。我已经删除了所有图像和卷。正如我在问题中所写。
  • :D 你把我弄到了那里。恰当的例子:这是解决问题的方法,但如果其他人仅针对 diff 文件夹问题尝试此解决方案,他们可能不会得到他们期望的结果。
  • 对我来说(docker 版本1.12),这是唯一可行的解​​决方案,即使我之前删除了所有图像和卷,并且/var/lib/docker 只包含一个*.db 文件,占用的空间by docker 不会被回收。
  • 如果您在 AKS 或任何其他云上,您可能需要在执行任何操作之前拍摄磁盘快照,以便之后轻松恢复。特别是在 Azure 中,您可能会暂时将内容移动到 /mnt 或其他虚拟临时空间,重新启动并查看,然后可能会移回;但请注意,这是一个不持久且不稳定的驱动器!
【解决方案2】:

此目录是使用 AUFS 存储驱动程序时存储容器 rootfs 层的位置(如果加载了 AUFS 内核模块,则默认为)。

如果您有一堆 *-removing 目录,这是由于删除尝试失败造成的。这可能由于各种原因而发生,最常见的是 unmount 由于 device or resource busy 而失败。

在 Docker 17.06 之前,如果您使用 docker rm -f 删除容器,则所有容器元数据都将被删除,即使在清理容器的某处出现错误(例如,未能删除 rootfs 层)。 在 17.06 中,它将不再删除容器元数据,而是将容器标记为 Dead 状态,以便您可以再次尝试将其删除。

您可以安全地删除这些目录,但我会先停止 docker,然后删除,然后重新启动 docker。

【讨论】:

  • 另请注意,17.06.1 中有明显的回归可能会导致您的问题。这将在即将到来的 17.06.2 中修复。
  • 能否请您添加一个今天应该用来清理 docker 的命令列表?
  • 没有什么会自动清理这些删除目录,但是docker system prune 是在一个命令中清理未使用内容的最佳方法。
  • 我觉得docker system prune这里应该有最多的点赞数。
【解决方案3】:

docker 将大量工作分为三个主要领域:

  1. 检查下载和编译的图像。 通过运行以下命令清理未使用和死的图像

    $docker image prune -a

  2. Docker 创建了很多卷,其中一些卷来自不再使用的死容器 清理卷并回收空间使用

    $docker system prune -af &&
    docker image prune -af &&
    docker system prune -af --volumes &&
    码头工人系统df

  3. Docker 容器日志在生成 GB 的日志方面也非常臭名昭著 容器层的overlay2存储也是另一个消耗GB的来源。 一种更好的方法是计算 docker 映像的大小,然后使用以下存储和日志上限说明限制 docker 容器。 对于这些功能,请使用 docker V19 及更高版本。

    $docker run -it --storage-opt size=2G --log-opt mode=non-blocking --log-opt max-buffer-size=4m fedora /bin/bash

【讨论】:

    【解决方案4】:

    请注意,这实际上是一个已知但仍悬而未决的问题:https://github.com/moby/moby/issues/37724 如果您有同样的问题,我建议您在 GitHub 上“点赞”该问题,以便尽快解决。

    【讨论】:

      【解决方案5】:

      我有同样的问题。 在我的情况下,解决方案是:

      1. 查看所有图片:
        泊坞窗图片

      2. 删除旧的未使用图像:
        docker rmi IMAGE_ID

      3. 您可能需要修剪已停止的容器:
        码头集装箱修剪

      附言docker --help 是很好的解决方案:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-07
        • 2019-02-22
        • 2017-10-29
        • 2016-10-06
        • 1970-01-01
        • 2019-09-11
        • 2019-01-16
        • 1970-01-01
        相关资源
        最近更新 更多