Docker守护进程不会从空间捕获22开始

时间:2019-06-07 21:34:56

标签: docker

到目前为止,我见过的用于清理docker安装程序的每个问题/答案都使用docker守护程序,但我们似乎遇到了catch 22:如果驱动器空间不足,则docker守护程序将无法启动,但是除非运行docker守护程序,否则您不能删除容器/图像:

您无法启动Docker守护程序:

~$ systemctl status docker.service
Jun 07 13:58:52 server-name docker[24266]: time=snip level=fatal msg=
"Error starting daemon: write /var/lib/docker/volumes/metadata.db: no space left on device"

那么,有人知道如何避开Catch-22吗?

我无法通过常规方法删除容器,因为这需要运行docker守护程序。

我无法运行docker守护进程,因为驱动器已由上述容器填充。

我无法增加存储,因为这是一个物理硬盘,容量为/dev/mapper/drive-name 932G 926G 64K 100% /var/lib/docker

在不运行docker守护程序的情况下删除容器/映像的任何方法,还是在空间不足的驱动器上运行守护程序?还有其他我希望打捞的容器。我确实知道我要删除的容器的哈希值。

1 个答案:

答案 0 :(得分:0)

此答案是为了解决精简池最小可用空间错误。您可能已经将系统扭曲到足以处于第二个错误状态:

<块引用>

devmapper:Thin Pool 有 X 个空闲数据块,小于最低要求的 Y 个空闲数据块。

<块引用>

基本设备 UUID 和文件系统验证失败:devmapper:无法找到设备 /dev/mapper/docker 的 uuid

环境水平集:

  • 你的生态系统已经稳定了几个月。

  • 您没有制作新图像或显着改变事物。

  • 您的容器现在/最近退出/死亡/崩溃。

  • 尝试重新启动它们失败。

  • 您开始寻找与磁盘空间相关的问题,并且您可能运行了此(或某些变体):

  • docker system prune -a -f --volumes

这不会改变您得到的最终错误。也许图像开始构建,但由于空间可用问题仍然崩溃。现在您没有预先构建的图像,因此所需的内存实际上增加了。

许多指南都告诉您不要使用精简池驱动程序或完全重新安装 docker,但预期您正在寻找快速修复方法,并且您可能有一些环境禁止这样做。

这就是我所做的,终于成功了,没有完全重新安装。

1.) 停止 Docker

sudo systemctl stop docker

2.) 删除 data、devicemapper 和 tmp-old 目录

sudo rm -r /var/lib/docker/devicemapper
sudo rm -r /var/lib/docker/data
sudo rm -r /var/lib/docker/tmp-old

3.) 重新启动 docker 代理。它将重建折叠和存根的设备映射器。

sudo systemctl start docker

4.) 像往常一样重建并重新启动您的容器。

docker run ...