diff --git a/pkg/kubelet/container/image_puller.go b/pkg/kubelet/container/image_puller.go index 3a5e5de9195..7138eac1ccc 100644 --- a/pkg/kubelet/container/image_puller.go +++ b/pkg/kubelet/container/image_puller.go @@ -105,7 +105,12 @@ func (puller *imagePuller) PullImage(pod *api.Pod, container *api.Container, pul if err = puller.runtime.PullImage(spec, pullSecrets); err != nil { puller.logIt(ref, "Failed", logPrefix, fmt.Sprintf("Failed to pull image %q: %v", container.Image, err), glog.Warning) puller.backOff.Next(backOffKey, puller.backOff.Clock.Now()) - return ErrImagePull, err.Error() + if err == RegistryUnavailable { + msg := fmt.Sprintf("image pull failed for %s because the registry is temporarily unavailable.", container.Image) + return err, msg + } else { + return ErrImagePull, err.Error() + } } puller.logIt(ref, "Pulled", logPrefix, fmt.Sprintf("Successfully pulled image %q", container.Image), glog.Info) puller.backOff.GC() diff --git a/pkg/kubelet/container/runtime.go b/pkg/kubelet/container/runtime.go index 570f46a6604..83a4e179195 100644 --- a/pkg/kubelet/container/runtime.go +++ b/pkg/kubelet/container/runtime.go @@ -45,6 +45,9 @@ var ( // Required Image is absent on host and PullPolicy is NeverPullImage ErrImageNeverPull = errors.New("ErrImageNeverPull") + + // Get http error when pulling image from registry + RegistryUnavailable = errors.New("RegistryUnavailable") ) var ErrRunContainer = errors.New("RunContainerError") diff --git a/pkg/kubelet/dockertools/docker.go b/pkg/kubelet/dockertools/docker.go index 72727fe92c8..fd881d12ef8 100644 --- a/pkg/kubelet/dockertools/docker.go +++ b/pkg/kubelet/dockertools/docker.go @@ -130,7 +130,7 @@ func filterHTTPError(err error, image string) error { jerr.Code == http.StatusServiceUnavailable || jerr.Code == http.StatusGatewayTimeout) { glog.V(2).Infof("Pulling image %q failed: %v", image, err) - return fmt.Errorf("image pull failed for %s because the registry is temporarily unavailable.", image) + return kubecontainer.RegistryUnavailable } else { return err } diff --git a/pkg/kubelet/dockertools/docker_test.go b/pkg/kubelet/dockertools/docker_test.go index 7f69de5bdf4..c81289da167 100644 --- a/pkg/kubelet/dockertools/docker_test.go +++ b/pkg/kubelet/dockertools/docker_test.go @@ -257,7 +257,7 @@ func TestPullWithJSONError(t *testing.T) { "Bad gateway": { "ubuntu", &jsonmessage.JSONError{Code: 502, Message: "\n\n
\n \n \nWe have been contacted of this error, feel free to check out status.docker.com\n to see if there is a bigger issue.
\n\n \n"}, - "because the registry is temporarily unavailable", + kubecontainer.RegistryUnavailable.Error(), }, } for i, test := range tests {