// pushImage pushes a docker image to the registry specified in its tag. // The method will retry to push the image when following scenarios occur: // - Docker registry is down temporarily or permanently // - other image is being pushed to the registry // If any other scenario the push will fail, without retries. func pushImage(client DockerClient, name string, authConfig docker.AuthConfiguration) error { repository, tag := docker.ParseRepositoryTag(name) opts := docker.PushImageOptions{ Name: repository, Tag: tag, } if glog.V(5) { opts.OutputStream = os.Stderr } var err error var retriableError = false for retries := 0; retries <= DefaultPushRetryCount; retries++ { err = client.PushImage(opts, authConfig) if err == nil { return nil } errMsg := fmt.Sprintf("%s", err) for _, errorString := range RetriableErrors { if strings.Contains(errMsg, errorString) { retriableError = true break } } if !retriableError { return err } utilruntime.HandleError(fmt.Errorf("push for image %s failed, will retry in %s ...", name, DefaultPushRetryDelay)) glog.Flush() time.Sleep(DefaultPushRetryDelay) } return err }
// pushImage pushes a docker image to the registry specified in its tag. // The method will retry to push the image when following scenarios occur: // - Docker registry is down temporarily or permanently // - other image is being pushed to the registry // If any other scenario the push will fail, without retries. func pushImage(client DockerClient, name string, authConfig docker.AuthConfiguration) error { repository, tag := docker.ParseRepositoryTag(name) opts := docker.PushImageOptions{ Name: repository, Tag: tag, } if glog.V(5) { opts.OutputStream = os.Stderr } var err error for retries := 0; retries <= DefaultPushRetryCount; retries++ { err = client.PushImage(opts, authConfig) if err == nil { return nil } errMsg := fmt.Sprintf("%s", err) if !strings.Contains(errMsg, "ping attempt failed with error") && !strings.Contains(errMsg, "is already in progress") { return err } util.HandleError(fmt.Errorf("push for image %s failed, will retry in %s seconds ...", name, DefaultPushRetryDelay)) glog.Flush() time.Sleep(DefaultPushRetryDelay) } return err }
// pushImage pushes a docker image to the registry specified in its tag func pushImage(client DockerClient, name string, authConfig docker.AuthConfiguration) error { repository, tag := docker.ParseRepositoryTag(name) opts := docker.PushImageOptions{ Name: repository, Tag: tag, } if glog.V(5) { opts.OutputStream = os.Stderr } var err error for retries := 0; retries <= DefaultPushRetryCount; retries++ { err = client.PushImage(opts, authConfig) if err == nil { return nil } if retries == DefaultPushRetryCount { return err } util.HandleError(fmt.Errorf("push for image %s failed, will retry in %s ...", name, DefaultPushRetryDelay)) glog.Flush() time.Sleep(DefaultPushRetryDelay) } return err }