【问题标题】:No space left on device due to docker/cron由于 docker/cron,设备上没有剩余空间
【发布时间】:2019-10-16 07:53:29
【问题描述】:

我在谷歌云上有一个基本服务器,它每 30 分钟通过 cron 运行一次 docker 容器。我注意到 docker 命令停止工作,并且出现错误提示

docker: Error response from daemon: no space left on device.

然后我注意到,即使我尝试在 bash 中通过键入 cd path/ 并点击 tab 来自动完成时,我也会收到此错误。我发现存储可能有问题,所以我尝试了df -h,它显示了这个:

Filesystem      Size  Used Avail Use% Mounted on
udev            860M     0  860M   0% /dev
tmpfs           175M   19M  157M  11% /run
/dev/sda1       9.7G  9.7G     0 100% /        
tmpfs           871M     0  871M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           871M     0  871M   0% /sys/fs/cgroup
tmpfs           175M     0  175M   0% /run/user/1001

正如您所见,/dev/sda1 出于某种原因已 100% 满。为什么会发生这种情况,我该如何解决?

我注意到有几千个退出的 docker 容器,所以我用这个命令删除了它:

docker rm -v $(docker ps -a -q -f status=exited)

现在存储使用率为 61%,仍然太高。

【问题讨论】:

  • 常见原因是/var/log 中的一些日志泛滥并不总是如此,但更好的是您可以尝试使用find /var -printf '%s %p\n'| sort -nr | head -10 来查看哪些是占用磁盘最多的前几个文件。如果它在/var/log 中,那么您需要检查哪个应用程序正在淹没日志并修复该应用程序。运行这个 FOR /var ,/home
  • @ps 该命令已经运行了 5 分钟以上。我怀疑这可能是问题所在。有没有办法绕过这个命令?
  • 您可以执行ctrl + c 或从其他终端kill 执行pidfind 命令。现在您必须手动可视化文件的大小。
  • 也是另一个常见的情况,试着回忆一下最近是否有人向容器进行了一些文件传输并保持原样?
  • @ps 容器仅由 cron 自动运行。除了我之外,没有其他人可以访问服务器。我应该如何可视化哪些文件夹正在占用空间?

标签: docker ubuntu cron ubuntu-16.04


【解决方案1】:

当运行不需要保持停止状态的容器时,最好使用docker run --rm ... 自动清理停止的容器。

如果容器生成卷,在 docker volume ls 中可见,一旦不再需要数据,您可能需要清理这些卷。在运行时带有--rm 标志,匿名卷(显示为长唯一ID)将被自动删除。

Docker 也提供了命令:

docker system prune

您可以自动清理图像、容器、网络甚至卷。请注意,在运行此命令之前,尤其是在将其自动化之前,您应该花时间了解该命令的作用。在编写此命令的脚本时,您可以使用 -f 标志绕过提示。

在运行修剪之前,您可以检查:

docker system df

查看每个组件正在使用多少磁盘,并且每个组件都有自己的修剪命令,例如docker container prunedocker volume prune,如果您只想清洁一个区域。

有关 prune 命令的更多详细信息,请参阅:https://docs.docker.com/engine/reference/commandline/system_prune/

【讨论】:

    猜你喜欢
    • 2021-08-02
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2015-08-30
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多