summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2018-09-26 13:19:45 -0500
committerbaude <bbaude@redhat.com>2018-09-28 12:48:54 -0500
commita931c441043cfc2f03be1d8b92dc5b31b2d2ca4b (patch)
treef1df3583f8799b0adf8a32ee58d30239d89247a2
parentca8469aace64d71fdb1849607d8227c31a3cf4da (diff)
downloadpodman-a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b.tar.gz
podman-a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b.tar.bz2
podman-a931c441043cfc2f03be1d8b92dc5b31b2d2ca4b.zip
run complex image names with short names
In cases where the image name is more complex like: quay/baude/alpine_nginx:latest and is not from the docker registry, we need to be able to run the image by its shortname such as baude/alpine_nginx. The same goes when the image is not from a registry but instead has the localhost repository. This resolves buildah issue #1034 Signed-off-by: baude <bbaude@redhat.com>
-rw-r--r--libpod/image/image.go27
-rw-r--r--test/e2e/run_test.go22
2 files changed, 29 insertions, 20 deletions
diff --git a/libpod/image/image.go b/libpod/image/image.go
index 2c70c6316..197a83dc1 100644
--- a/libpod/image/image.go
+++ b/libpod/image/image.go
@@ -239,6 +239,7 @@ func (i *Image) getLocalImage() (*storage.Image, error) {
if err != nil {
return nil, err
}
+
// the inputname isn't tagged, so we assume latest and try again
if !decomposedImage.isTagged {
taggedName = fmt.Sprintf("%s:latest", i.InputName)
@@ -247,15 +248,14 @@ func (i *Image) getLocalImage() (*storage.Image, error) {
return img.image, nil
}
}
- hasReg, err := i.hasRegistry()
- if err != nil {
- return nil, errors.Wrapf(err, imageError)
- }
- // if the input name has a registry in it, the image isnt here
- if hasReg {
+ // The image has a registry name in it and we made sure we looked for it locally
+ // with a tag. It cannot be local.
+ if decomposedImage.hasRegistry {
return nil, errors.Errorf("%s", imageError)
+
}
+
// if the image is saved with the repository localhost, searching with localhost prepended is necessary
// We don't need to strip the sha because we have already determined it is not an ID
img, err = i.imageruntime.getImage(fmt.Sprintf("%s/%s", DefaultLocalRegistry, i.InputName))
@@ -274,21 +274,8 @@ func (i *Image) getLocalImage() (*storage.Image, error) {
if err == nil {
return repoImage, nil
}
- return nil, errors.Wrapf(err, imageError)
-}
-// hasRegistry returns a bool/err response if the image has a registry in its
-// name
-func (i *Image) hasRegistry() (bool, error) {
- imgRef, err := reference.Parse(i.InputName)
- if err != nil {
- return false, err
- }
- registry := reference.Domain(imgRef.(reference.Named))
- if registry != "" {
- return true, nil
- }
- return false, nil
+ return nil, errors.Wrapf(err, imageError)
}
// ID returns the image ID as a string
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index 4339e0f5c..777b49cd8 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -42,6 +42,28 @@ var _ = Describe("Podman run", func() {
Expect(session.ExitCode()).To(Equal(0))
})
+ It("podman run a container based on a complex local image name", func() {
+ podmanTest.RestoreArtifact(nginx)
+ session := podmanTest.Podman([]string{"run", "baude/alpine_nginx:latest", "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ErrorToString()).ToNot(ContainSubstring("Trying to pull"))
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
+ It("podman run a container based on on a short name with localhost", func() {
+ podmanTest.RestoreArtifact(nginx)
+ tag := podmanTest.Podman([]string{"tag", nginx, "localhost/baude/alpine_nginx:latest"})
+ tag.WaitWithDefaultTimeout()
+
+ rmi := podmanTest.Podman([]string{"rmi", nginx})
+ rmi.WaitWithDefaultTimeout()
+
+ session := podmanTest.Podman([]string{"run", "baude/alpine_nginx:latest", "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ErrorToString()).ToNot(ContainSubstring("Trying to pull"))
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
It("podman run a container based on local image with short options", func() {
session := podmanTest.Podman([]string{"run", "-dt", ALPINE, "ls"})
session.WaitWithDefaultTimeout()