Docker引擎不会让我删除旧的容器

我有一个docker主机与很多退出的容器。 由于我的注意力不集中,主机服务器在很大程度上由于这些容器而耗尽了磁盘空间。 我试图用docker rm删除它们,但得到一个关于没有足够的磁盘空间去除的错误。 但是,当时我没有意识到这个潜在的意义,不再有具体的信息。

然后,我释放了设备上的一些空间,然后再次尝试docker rm ,现在我得到这个消息:

 [me@machine ~]$ docker rm amazing_mahavira Error response from daemon: Driver devicemapper failed to remove root filesystem 92c18d5ebe6cgc328225353064f30b1cb78e1ea668aad05c3d3d6e7095e20524: devicemapper: Error running DeleteDevice dm_task_run failed 

试图docker save我的图片也失败。

这里是docker info存储输出:

 Storage Driver: devicemapper Pool Name: docker-253:0-273125642-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 92.09 GB Data Space Total: 107.4 GB Data Space Available: 14.24 MB Metadata Space Used: 587.1 MB Metadata Space Total: 2.147 GB Metadata Space Available: 14.24 MB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/devicemapper/data 

我看到这个链接有一个类似的问题,除了它看起来像一个bug,没有任何build议的解决scheme。 我search了docker github类似的问题,但没有看到。

什么是我最好的方式来清理所有这些,以便我可以再次有一个工作的docker主机? 没有容器或图像,我绝对必须保留,虽然我真的想保存一些图像。 我可以重新安装这个设备吗,还是注定了?

服务器是RHEL 7.2,FWIW。

我从来没有能够修复dockerdevmapper循环文件损坏。

如果重新启动整个机器不能解决它,你不能保存你的图像docker save ,我会标记这个docker设置完全损失。

一个快速而简单的方法,让它回到原始的工作状态,是这样的:

 sudo service docker stop sudo rm /var/lib/docker/* sudo service start 

这将删除所有当前的docker数据,所以图像,容器,卷,networking,任何东西。 Docker会重新创build所有需要的文件,并且会像新的一样。

作为将来的步骤,不仅可以对磁盘空间进行监视,还可以切换到其他存储驱动程序之一。

请参阅有关此主题的泊坞窗文档 。 如果你的内核支持它,最简单的可能是overlay (或者overlay2如果你的内核是4.0以上的话),或者aufs (在RHEL上可能不那么容易,因为没有官方的支持)。

另一个更具挑战性的解决scheme是将devicemapper切换到direct-lvm而不是loop-lvm(它现在是什么)。 RHELprimefaces文档提到docker-storage-setup应该帮助/自动设置direct-lvm,但是我在那里的经验有限