Browse Source

Merge pull request #10469 from dmcgowan/v2-registry-push-fallback

Add push fallback to v1 for the official registry
Arnaud Porterie 10 năm trước cách đây
mục cha
commit
bb4d24de06
1 tập tin đã thay đổi với 10 bổ sung2 xóa
  1. 10 2
      graph/push.go

+ 10 - 2
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 {