Browse code

Include original error when translating distribution errors

Before:

curl -v -X POST --unix-socket /var/run/docker.sock "http://localhost/images/create?fromImage=library/busybox:lsfkjsdflkjsdf"
{"message":"manifest for busybox:lsfkjsdflkjsdf not found"}

curl -v -X POST --unix-socket /var/run/docker.sock "http://localhost/images/create?fromImage=library/nosuchimage:latest"
{"message":"pull access denied for nosuchimage, repository does not exist or may require 'docker login'"}

After:

curl -v -X POST --unix-socket /var/run/docker.sock "http://localhost/images/create?fromImage=library/busybox:lsfkjsdflkjsdf"
{"message":"manifest for busybox:lsfkjsdflkjsdf not found: manifest unknown: manifest unknown"}

curl -v -X POST --unix-socket /var/run/docker.sock "http://localhost/images/create?fromImage=library/nosuchimage:latest"
{"message":"pull access denied for nosuchimage, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"}

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2018/08/03 22:41:05
Showing 1 changed files
... ...
@@ -14,6 +14,7 @@ import (
14 14
 	"github.com/docker/distribution/registry/client/auth"
15 15
 	"github.com/docker/docker/distribution/xfer"
16 16
 	"github.com/docker/docker/errdefs"
17
+	"github.com/pkg/errors"
17 18
 	"github.com/sirupsen/logrus"
18 19
 )
19 20
 
... ...
@@ -70,11 +71,11 @@ func (e notFoundError) Error() string {
70 70
 	switch e.cause.Code {
71 71
 	case errcode.ErrorCodeDenied:
72 72
 		// ErrorCodeDenied is used when access to the repository was denied
73
-		return fmt.Sprintf("pull access denied for %s, repository does not exist or may require 'docker login'", reference.FamiliarName(e.ref))
73
+		return errors.Wrapf(e.cause, "pull access denied for %s, repository does not exist or may require 'docker login'", reference.FamiliarName(e.ref)).Error()
74 74
 	case v2.ErrorCodeManifestUnknown:
75
-		return fmt.Sprintf("manifest for %s not found", reference.FamiliarString(e.ref))
75
+		return errors.Wrapf(e.cause, "manifest for %s not found", reference.FamiliarString(e.ref)).Error()
76 76
 	case v2.ErrorCodeNameUnknown:
77
-		return fmt.Sprintf("repository %s not found", reference.FamiliarName(e.ref))
77
+		return errors.Wrapf(e.cause, "repository %s not found", reference.FamiliarName(e.ref)).Error()
78 78
 	}
79 79
 	// Shouldn't get here, but this is better than returning an empty string
80 80
 	return e.cause.Message