container runlabel remove image tag from name

When no name is given for podman container runlabel it will default to
the image base name. However this can contain a tag. Since podman does
not accept container names with a colon the run command will fail if it
contains something like `podman run --name NAME ...`.

Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2004263

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
Paul Holzinger 2021-09-15 15:36:00 +02:00
parent 4dd7bfdfaa
commit 0b1c45bc54
No known key found for this signature in database
GPG key ID: EB145DD938A3CAF2
2 changed files with 21 additions and 0 deletions

View file

@ -133,6 +133,9 @@ func generateRunlabelCommand(runlabel string, img *libimage.Image, inputName str
}
splitImageName := strings.Split(normalize, "/")
name = splitImageName[len(splitImageName)-1]
// make sure to remove the tag from the image name, otherwise the name cannot
// be used as container name because a colon is an illegal character
name = strings.SplitN(name, ":", 2)[0]
}
// Append the user-specified arguments to the runlabel (command).

View file

@ -22,6 +22,10 @@ var GlobalDockerfile = fmt.Sprintf(`
FROM %s
LABEL RUN echo \$GLOBAL_OPTS`, ALPINE)
var PodmanRunlabelNameDockerfile = fmt.Sprintf(`
FROM %s
LABEL RUN podman run --name NAME IMAGE`, ALPINE)
var _ = Describe("podman container runlabel", func() {
var (
tempdir string
@ -128,4 +132,18 @@ var _ = Describe("podman container runlabel", func() {
result.WaitWithDefaultTimeout()
Expect(result).Should(Exit(0))
})
It("podman container runlabel name removes tag from image", func() {
image := "podman-runlabel-name:sometag"
podmanTest.BuildImage(PodmanRunlabelNameDockerfile, image, "false")
result := podmanTest.Podman([]string{"container", "runlabel", "--display", "RUN", image})
result.WaitWithDefaultTimeout()
Expect(result).Should(Exit(0))
Expect(result.OutputToString()).To(Equal("command: " + podmanTest.PodmanBinary + " run --name podman-runlabel-name localhost/" + image))
result = podmanTest.Podman([]string{"rmi", image})
result.WaitWithDefaultTimeout()
Expect(result).Should(Exit(0))
})
})