到目前为止,我见过的用于清理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守护程序的情况下删除容器/映像的任何方法,还是在空间不足的驱动器上运行守护程序?还有其他我希望打捞的容器。我确实知道我要删除的容器的哈希值。
答案 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 ...