diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index 0e8f80814f9..51379b9c66f 100644 --- a/pkg/kubelet/dockershim/docker_container.go +++ b/pkg/kubelet/dockershim/docker_container.go @@ -364,10 +364,14 @@ func (ds *dockerService) ContainerStatus(containerID string) (*runtimeapi.Contai } labels, annotations := extractLabels(r.Config.Labels) + imageName := r.Config.Image + if len(ir.RepoTags) > 0 { + imageName = ir.RepoTags[0] + } return &runtimeapi.ContainerStatus{ Id: &r.ID, Metadata: metadata, - Image: &runtimeapi.ImageSpec{Image: &r.Config.Image}, + Image: &runtimeapi.ImageSpec{Image: &imageName}, ImageRef: &imageID, Mounts: mounts, ExitCode: &exitCode, diff --git a/pkg/kubelet/dockertools/docker_manager.go b/pkg/kubelet/dockertools/docker_manager.go index 1f386cdf448..d14d8fb47af 100644 --- a/pkg/kubelet/dockertools/docker_manager.go +++ b/pkg/kubelet/dockertools/docker_manager.go @@ -430,10 +430,14 @@ func (dm *DockerManager) inspectContainer(id string, podName, podNamespace strin } } + imageName := iResult.Config.Image + if len(imgInspectResult.RepoTags) > 0 { + imageName = imgInspectResult.RepoTags[0] + } status := kubecontainer.ContainerStatus{ Name: containerName, RestartCount: containerInfo.RestartCount, - Image: iResult.Config.Image, + Image: imageName, ImageID: imageID, ID: kubecontainer.DockerID(id).ContainerID(), ExitCode: iResult.State.ExitCode, diff --git a/pkg/kubelet/dockertools/fake_docker_client.go b/pkg/kubelet/dockertools/fake_docker_client.go index f2e59e35af5..a50145e9db4 100644 --- a/pkg/kubelet/dockertools/fake_docker_client.go +++ b/pkg/kubelet/dockertools/fake_docker_client.go @@ -478,7 +478,10 @@ func (f *FakeDockerClient) PullImage(image string, auth dockertypes.AuthConfig, err := f.popError("pull") if err == nil { authJson, _ := json.Marshal(auth) - f.Image = &dockertypes.ImageInspect{ID: image} + f.Image = &dockertypes.ImageInspect{ + ID: image, + RepoTags: []string{image}, + } f.pulled = append(f.pulled, fmt.Sprintf("%s using %s", image, string(authJson))) } return err diff --git a/pkg/kubelet/images/image_manager.go b/pkg/kubelet/images/image_manager.go index e4ba9c4c02e..9cbbbd5a80f 100644 --- a/pkg/kubelet/images/image_manager.go +++ b/pkg/kubelet/images/image_manager.go @@ -81,7 +81,7 @@ func (m *imageManager) logIt(ref *v1.ObjectReference, eventtype, event, prefix, } } -// EnsureImageExists pulls the image for the specified pod and container, and returnsIt returns +// EnsureImageExists pulls the image for the specified pod and container, and returns // (imageRef, error message, error). func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, pullSecrets []v1.Secret) (string, string, error) { logPrefix := fmt.Sprintf("%s/%s", pod.Name, container.Image) @@ -106,8 +106,9 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p return "", msg, ErrImageInspect } - if !shouldPullImage(container, imageRef != "") { - if imageRef != "" { + present := imageRef != "" + if !shouldPullImage(container, present) { + if present { msg := fmt.Sprintf("Container image %q already present on machine", container.Image) m.logIt(ref, v1.EventTypeNormal, events.PulledImage, logPrefix, msg, glog.Info) return imageRef, "", nil @@ -125,7 +126,7 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p return "", msg, ErrImagePullBackOff } m.logIt(ref, v1.EventTypeNormal, events.PullingImage, logPrefix, fmt.Sprintf("pulling image %q", container.Image), glog.Info) - pullChan := make(chan imageRefWithError) + pullChan := make(chan pullResult) m.puller.pullImage(spec, pullSecrets, pullChan) imageRefWithErr := <-pullChan if imageRefWithErr.err != nil { diff --git a/pkg/kubelet/images/puller.go b/pkg/kubelet/images/puller.go index 6ff1d7cb239..6beaa1e6b00 100644 --- a/pkg/kubelet/images/puller.go +++ b/pkg/kubelet/images/puller.go @@ -24,13 +24,13 @@ import ( "k8s.io/kubernetes/pkg/util/wait" ) -type imageRefWithError struct { +type pullResult struct { imageRef string err error } type imagePuller interface { - pullImage(kubecontainer.ImageSpec, []v1.Secret, chan<- imageRefWithError) + pullImage(kubecontainer.ImageSpec, []v1.Secret, chan<- pullResult) } var _, _ imagePuller = ¶llelImagePuller{}, &serialImagePuller{} @@ -43,10 +43,10 @@ func newParallelImagePuller(imageService kubecontainer.ImageService) imagePuller return ¶llelImagePuller{imageService} } -func (pip *parallelImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- imageRefWithError) { +func (pip *parallelImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- pullResult) { go func() { imageRef, err := pip.imageService.PullImage(spec, pullSecrets) - pullChan <- imageRefWithError{ + pullChan <- pullResult{ imageRef: imageRef, err: err, } @@ -70,10 +70,10 @@ func newSerialImagePuller(imageService kubecontainer.ImageService) imagePuller { type imagePullRequest struct { spec kubecontainer.ImageSpec pullSecrets []v1.Secret - pullChan chan<- imageRefWithError + pullChan chan<- pullResult } -func (sip *serialImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- imageRefWithError) { +func (sip *serialImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecrets []v1.Secret, pullChan chan<- pullResult) { sip.pullRequests <- &imagePullRequest{ spec: spec, pullSecrets: pullSecrets, @@ -84,7 +84,7 @@ func (sip *serialImagePuller) pullImage(spec kubecontainer.ImageSpec, pullSecret func (sip *serialImagePuller) processImagePullRequests() { for pullRequest := range sip.pullRequests { imageRef, err := sip.imageService.PullImage(pullRequest.spec, pullRequest.pullSecrets) - pullRequest.pullChan <- imageRefWithError{ + pullRequest.pullChan <- pullResult{ imageRef: imageRef, err: err, }