浏览代码

Merge pull request #42201 from AkihiroSuda/annotate-btrfs-error

rootless: btrfs: annotate error with human-readable hint string
Sebastiaan van Stijn 4 年之前
父节点
当前提交
343665850e
共有 1 个文件被更改,包括 5 次插入0 次删除
  1. 5 0
      daemon/graphdriver/btrfs/btrfs.go

+ 5 - 0
daemon/graphdriver/btrfs/btrfs.go

@@ -26,6 +26,7 @@ import (
 	"sync"
 	"unsafe"
 
+	"github.com/containerd/containerd/pkg/userns"
 	"github.com/docker/docker/daemon/graphdriver"
 	"github.com/docker/docker/pkg/containerfs"
 	"github.com/docker/docker/pkg/idtools"
@@ -600,6 +601,10 @@ func (d *Driver) Remove(id string) error {
 
 	if err := subvolDelete(d.subvolumesDir(), id, d.quotaEnabled); err != nil {
 		if d.quotaEnabled {
+			// use strings.Contains() rather than errors.Is(), because subvolDelete() does not use %w yet
+			if userns.RunningInUserNS() && strings.Contains(err.Error(), "operation not permitted") {
+				err = errors.Wrap(err, `failed to delete subvolume without root (hint: remount btrfs on "user_subvol_rm_allowed" option, or update the kernel to >= 4.18, or change the storage driver to "fuse-overlayfs")`)
+			}
 			return err
 		}
 		// If quota is not enabled, fallback to rmdir syscall to delete subvolumes.