From 0afc71fc90d208517bda0e2ac8f50a0a3a753f5d Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Tue, 24 May 2022 18:02:01 +0900 Subject: [PATCH] archive: add human-readable hint to Lchown error Before: ``` $ docker pull gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v0.7.0 failed to register layer: ApplyLayer exit status 1 stdout: stderr: lchown /usr/local/bin/docker-credential-gcr: invalid argument ``` After: ``` $ docker pull gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v0.7.0 failed to register layer: ApplyLayer exit status 1 stdout: stderr: failed to Lchown "/usr/local/bin/docker-credential-gcr" for UID 205001, GID 5000: lchown /usr/local/bin/docker-credential-gcr: invalid argument (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid) ``` For issue 43576 Signed-off-by: Akihiro Suda --- pkg/archive/archive.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/archive/archive.go b/pkg/archive/archive.go index 986f014491..50f5ae2979 100644 --- a/pkg/archive/archive.go +++ b/pkg/archive/archive.go @@ -18,12 +18,14 @@ import ( "syscall" "time" + "github.com/containerd/containerd/pkg/userns" "github.com/docker/docker/pkg/fileutils" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/pools" "github.com/docker/docker/pkg/system" "github.com/klauspost/compress/zstd" + "github.com/pkg/errors" "github.com/sirupsen/logrus" exec "golang.org/x/sys/execabs" ) @@ -766,7 +768,11 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, L chownOpts = &idtools.Identity{UID: hdr.Uid, GID: hdr.Gid} } if err := os.Lchown(path, chownOpts.UID, chownOpts.GID); err != nil { - return err + msg := "failed to Lchown %q for UID %d, GID %d" + if errors.Is(err, syscall.EINVAL) && userns.RunningInUserNS() { + msg += " (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid)" + } + return errors.Wrapf(err, msg, path, hdr.Uid, hdr.Gid) } }