From 410fa53f89b1c408ce57318bb054b4229ad845d5 Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Wed, 21 Oct 2020 15:25:17 +0200 Subject: [PATCH] container create: record correct image name Record the correct image name when creating a container by using the resolved image name if present. Otherwise, default to using the first available name or an empty string in which case the image must have been referenced by ID. Fixes: #8082 Signed-off-by: Valentin Rothberg --- libpod/image/image.go | 2 +- pkg/specgen/generate/container_create.go | 17 +++++++++++++---- test/system/030-run.bats | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/libpod/image/image.go b/libpod/image/image.go index 0900944eb5..85f8bf37ca 100644 --- a/libpod/image/image.go +++ b/libpod/image/image.go @@ -469,7 +469,7 @@ func (ir *Runtime) getLocalImage(inputName string) (string, *storage.Image, erro if err != nil { return "", nil, err } - img, err := ir.store.Image(ref.String()) + img, err := ir.store.Image(reference.TagNameOnly(ref).String()) if err == nil { return ref.String(), img, nil } diff --git a/pkg/specgen/generate/container_create.go b/pkg/specgen/generate/container_create.go index 105e36bc6d..f051537de8 100644 --- a/pkg/specgen/generate/container_create.go +++ b/pkg/specgen/generate/container_create.go @@ -4,6 +4,7 @@ import ( "context" "os" "path/filepath" + "strings" "github.com/containers/common/pkg/config" "github.com/containers/podman/v2/libpod" @@ -91,11 +92,19 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener if err != nil { return nil, err } - imgName := s.Image - names := newImage.Names() - if len(names) > 0 { - imgName = names[0] + // If the input name changed, we could properly resolve the + // image. Otherwise, it must have been an ID where we're + // defaulting to the first name or an empty one if no names are + // present. + imgName := newImage.InputName + if s.Image == newImage.InputName && strings.HasPrefix(newImage.ID(), s.Image) { + imgName = "" + names := newImage.Names() + if len(names) > 0 { + imgName = names[0] + } } + options = append(options, libpod.WithRootFSFromImage(newImage.ID(), imgName, s.RawImageName)) } if err := s.Validate(); err != nil { diff --git a/test/system/030-run.bats b/test/system/030-run.bats index 9f40377306..8712dc72d6 100644 --- a/test/system/030-run.bats +++ b/test/system/030-run.bats @@ -473,4 +473,23 @@ json-file | f run_podman kill $cid } +# Regression test for issue #8082 +@test "podman run : look up correct image name" { + # Create a 2nd tag for the local image. + local name="localhost/foo/bar" + run_podman tag $IMAGE $name + + # Create a container with the 2nd tag and make sure that it's being + # used. #8082 always inaccurately used the 1st tag. + run_podman create $name + cid="$output" + + run_podman inspect --format "{{.ImageName}}" $cid + is "$output" "$name" + + # Clean up. + run_podman rm $cid + run_podman untag $IMAGE $name +} + # vim: filetype=sh