From a47e2ff91ae72a30c39e8b2dd592c97e71f5a537 Mon Sep 17 00:00:00 2001 From: Yu-Ju Hong Date: Wed, 17 Aug 2016 11:01:50 -0700 Subject: [PATCH] Fix image inspection and matching An image string could contain a hostname (e.g., "docker.io") or not. The same applies to the RepoTags returned from an image inspection. To determine whether the image docker pulled matches what the user ask for, we check if the either string is the suffix of the other. --- pkg/kubelet/dockertools/docker.go | 23 +++++++++-------------- pkg/kubelet/dockertools/docker_test.go | 5 +++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pkg/kubelet/dockertools/docker.go b/pkg/kubelet/dockertools/docker.go index d5f2c6aadb9..cfff0ac8c38 100644 --- a/pkg/kubelet/dockertools/docker.go +++ b/pkg/kubelet/dockertools/docker.go @@ -166,24 +166,19 @@ func matchImageTagOrSHA(inspected dockertypes.ImageInspect, image string) bool { // No Tag or SHA specified, so just return what we have return true } - if isTagged { - hostname, _ := dockerref.SplitHostname(named) - // Check the RepoTags for an exact match - for _, tag := range inspected.RepoTags { - // Deal with image with hostname specified - if len(hostname) > 0 { - if strings.HasSuffix(image, tag) { - return true - } - } else { - if tag == image { - // We found a specific tag that we were looking for - return true - } + if isTagged { + // Check the RepoTags for a match. + for _, tag := range inspected.RepoTags { + // An image name (without the tag/digest) can be [hostname '/'] component ['/' component]* + // Because either the RepoTag or the name *may* contain the + // hostname or not, we only check for the suffix match. + if strings.HasSuffix(image, tag) || strings.HasSuffix(tag, image) { + return true } } } + if isDigested { algo := digest.Digest().Algorithm().String() sha := digest.Digest().Hex() diff --git a/pkg/kubelet/dockertools/docker_test.go b/pkg/kubelet/dockertools/docker_test.go index 411f5e3c195..2046cd279f5 100644 --- a/pkg/kubelet/dockertools/docker_test.go +++ b/pkg/kubelet/dockertools/docker_test.go @@ -183,6 +183,11 @@ func TestMatchImageTagOrSHA(t *testing.T) { Image: "docker.io/colemickens/hyperkube-amd64:217.9beff63", Output: true, }, + { + Inspected: dockertypes.ImageInspect{RepoTags: []string{"docker.io/kubernetes/pause:latest"}}, + Image: "kubernetes/pause:latest", + Output: true, + }, { Inspected: dockertypes.ImageInspect{ ID: "sha256:2208f7a29005d226d1ee33a63e33af1f47af6156c740d7d23c7948e8d282d53d",