Skip to content

Commit d2f3015

Browse files
committed
archive: add human-readable hint to Lchown error
Before: ``` $ nerdctl pull gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v0.7.0 FATA[0026] failed to extract layer sha256:f8a604834d388fd3d04c26e4ed832b36b617ea8a4e0b1665b9199bd10cfcb171: mount callback failed on /var/lib/containerd/tmpmounts/containerd-mount1818823128: lchown /var/lib/containerd/tmpmounts/containerd-mount1818823128/usr/local/bin/docker-credential-gcr: invalid argument: unknown ``` After: ``` $ nerdctl pull gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v0.7.0 FATA[0027] failed to extract layer sha256:f8a604834d388fd3d04c26e4ed832b36b617ea8a4e0b1665b9199bd10cfcb171: mount callback failed on /var/lib/containerd/tmpmounts/containerd-mount3521205359: failed to Lchown "/var/lib/containerd/tmpmounts/containerd-mount3521205359/usr/local/bin/docker-credential-gcr" for UID 205001, GID 5000: lchown /var/lib/containerd/tmpmounts/containerd-mount3521205359/usr/local/bin/docker-credential-gcr: invalid argument (Hint: try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid): unknown ``` Related to moby/moby issue 43576 but for containerd Signed-off-by: Akihiro Suda <[email protected]>
1 parent 22e8fc1 commit d2f3015

1 file changed

Lines changed: 5 additions & 0 deletions

File tree

archive/tar.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"time"
3232

3333
"github.com/containerd/containerd/log"
34+
"github.com/containerd/containerd/pkg/userns"
3435
"github.com/containerd/continuity/fs"
3536
)
3637

@@ -380,6 +381,10 @@ func createTarFile(ctx context.Context, path, extractDir string, hdr *tar.Header
380381
// Lchown is not supported on Windows.
381382
if runtime.GOOS != "windows" {
382383
if err := os.Lchown(path, hdr.Uid, hdr.Gid); err != nil {
384+
err = fmt.Errorf("failed to Lchown %q for UID %d, GID %d: %w", path, hdr.Uid, hdr.Gid, err)
385+
if errors.Is(err, syscall.EINVAL) && userns.RunningInUserNS() {
386+
err = fmt.Errorf("%w (Hint: try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid)", err)
387+
}
383388
return err
384389
}
385390
}

0 commit comments

Comments
 (0)