diff options
author | Valentin Rothberg <rothberg@redhat.com> | 2020-10-21 15:25:17 +0200 |
---|---|---|
committer | Valentin Rothberg <rothberg@redhat.com> | 2020-10-21 16:51:09 +0200 |
commit | 410fa53f89b1c408ce57318bb054b4229ad845d5 (patch) | |
tree | 4cb1848771aeedd3b5c0d8d9b3711d9925d3c06f | |
parent | 9d9c58ba64a59fc24d6807f495559ac2ec86b6e8 (diff) | |
download | podman-410fa53f89b1c408ce57318bb054b4229ad845d5.tar.gz podman-410fa53f89b1c408ce57318bb054b4229ad845d5.tar.bz2 podman-410fa53f89b1c408ce57318bb054b4229ad845d5.zip |
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 <rothberg@redhat.com>
-rw-r--r-- | libpod/image/image.go | 2 | ||||
-rw-r--r-- | pkg/specgen/generate/container_create.go | 17 | ||||
-rw-r--r-- | 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 0900944eb..85f8bf37c 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 105e36bc6..f051537de 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 9f4037730..8712dc72d 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 |