Allow v1 protocol fallback when pulling all tags from a repository unknown to v2 registry

This is a followup to #18839. That PR relaxed the fallback logic so that
if a manifest doesn't exist on v2, or the user is unauthorized to access
it, we try again with the v1 protocol. A similar special case is needed
for "pull all tags" (docker pull -a). If the v2 registry doesn't
recognize the repository, or doesn't allow the user to access it, we
should fall back to v1 and try to pull all tags from the v1 registry.
Conversely, if the v2 registry does allow us to list the tags, there
should be no fallback, even if there are errors pulling those tags.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
Aaron Lehmann 2015-12-23 15:21:43 -08:00
parent 71ddfd40ef
commit 693eb14e73

View file

@ -191,7 +191,7 @@ func addRequiredHeadersToRedirectedRequests(req *http.Request, via []*http.Reque
// ShouldV2Fallback returns true if this error is a reason to fall back to v1. // ShouldV2Fallback returns true if this error is a reason to fall back to v1.
func ShouldV2Fallback(err errcode.Error) bool { func ShouldV2Fallback(err errcode.Error) bool {
switch err.Code { switch err.Code {
case errcode.ErrorCodeUnauthorized, v2.ErrorCodeManifestUnknown: case errcode.ErrorCodeUnauthorized, v2.ErrorCodeManifestUnknown, v2.ErrorCodeNameUnknown:
return true return true
} }
return false return false