diff --git a/graph/push.go b/graph/push.go index 60e6e30168..ff699ee4b8 100644 --- a/graph/push.go +++ b/graph/push.go @@ -2,6 +2,7 @@ package graph import ( "bytes" + "errors" "fmt" "io" "io/ioutil" @@ -18,6 +19,8 @@ import ( "github.com/docker/libtrust" ) +var ErrV2RegistryUnavailable = errors.New("error v2 registry unavailable") + // Retrieve the all the images to be uploaded in the correct order func (s *TagStore) getImageList(localRepo map[string]string, requestedTag string) ([]string, map[string][]string, error) { var ( @@ -280,6 +283,10 @@ func (s *TagStore) pushV2Repository(r *registry.Session, eng *engine.Engine, out endpoint, err := r.V2RegistryEndpoint(repoInfo.Index) if err != nil { + if repoInfo.Index.Official { + log.Infof("Unable to push to V2 registry, falling back to v1: %s", err) + return ErrV2RegistryUnavailable + } return fmt.Errorf("error getting registry endpoint: %s", err) } @@ -454,8 +461,9 @@ func (s *TagStore) CmdPush(job *engine.Job) engine.Status { return engine.StatusOK } - // error out, no fallback to V1 - return job.Errorf("Error pushing to registry: %s", err) + if err != ErrV2RegistryUnavailable { + return job.Errorf("Error pushing to registry: %s", err) + } } if err != nil {