我正在运行Ubuntu 20.04,并在系统驱动器上使用zfs。
我试图删除一个docker容器,但我得到了这个错误:
glen $ docker rm c3250e315b06
Error response from daemon: container c3250e315b0631cc7fee17ab0c7f649a3995ea17e969705117e064a045b3775e: driver "zfs" failed to remove root filesystem: exit status 1: "/usr/sbin/zfs fs destroy -r rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d109cf1c84f20db9e6402fef9a4bd91fa8b94f1848a874539663bbdc40" => cannot destroy 'rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d109cf1c84f20db9e6402fef9a4bd91fa8b94f1848a874539663bbdc40': filesystem has dependent clones
use '-R' to destroy the following datasets:
rpool/ROOT/ubuntu_bl0u7i/var/lib/38ff67538bf4b2ccfef54cfeb55847cf6da6bee70a6bf2e5b063ab0e5820c0fd
rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d109cf1c84f20db9e6402fef9a4bd91fa8b94f1848a874539663bbdc40-init
我不知道从哪里开始犯这个错误。
有人能帮忙吗?
编辑:
我从这条评论中修复了它:https://github.com/moby/moby/issues/36967#issuecomment-676698563
但它摧毁了我所有的集装箱
我不知道如何通过Docker实现,但ZFS告诉您,文件系统rpool/ROOT/ubuntu_bl0u7i/var/lib/120f50d...bbdc40
有几个克隆是从该文件系统上的快照创建的。为了便于论证,我们假设只有一个,克隆的文件系统称为clone1
,它是在rpool/...bbdc40
文件系统上的snapshot1
的基础上创建的。所以你的层次结构是这样的:
rpool/...bbdc40 -> rpool/...bbdc40@snapshot1 -> clone1
问题是clone1
仍在引用snapshot1
中的数据,因此无法删除快照,从而无法删除原始文件系统。
然而,ZFS允许您更改";"父";文件系统通过使用zfs promote
命令,可以将层次结构更改为:
clone1 -> clone1@snapshot1 -> rpool/...bbdc40
现在没有人依赖rpool/...bbdc40
中的数据(因为快照已移动到新升级的父级clone1
上(,所以您可以删除它。
(也就是说,Docker可能假设它可以完全控制其文件系统的状态,所以如果你到处运行随机ZFS命令,它可能会让Docker感到悲伤和困惑。使用的风险自负。(