From 7d74be162c9704df848c865a9b4bcd4047da9124 Mon Sep 17 00:00:00 2001 From: Jessica Frazelle Date: Tue, 23 Sep 2014 15:58:05 -0700 Subject: [PATCH] Pull all image aliases for id. Closes #8141. Docker-DCO-1.1-Signed-off-by: Jessica Frazelle (github: jfrazelle) --- docs/sources/reference/commandline/cli.md | 11 +++++++---- graph/pull.go | 4 +++- integration-cli/docker_cli_pull_test.go | 6 ++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/docs/sources/reference/commandline/cli.md b/docs/sources/reference/commandline/cli.md index d801d65f95..074111bb0d 100644 --- a/docs/sources/reference/commandline/cli.md +++ b/docs/sources/reference/commandline/cli.md @@ -152,7 +152,7 @@ progress of your daemonized process. You can detach from the container again (and leave it running) with `CTRL-p CTRL-q` (for a quiet exit), or `CTRL-c` which will send a SIGKILL to the container, or `CTRL-\` to get a stacktrace of the -Docker client when it quits. When you detach from the container's +Docker client when it quits. When you detach from the container's process the exit code will be returned to the client. To stop a container, use `docker stop`. @@ -965,10 +965,13 @@ To download a particular image, or set of images (i.e., a repository), use `docker pull`: $ sudo docker pull debian - # will pull only the debian:latest image and its intermediate layers + # will pull the debian:latest image, its intermediate layers + # and any aliases of the same id $ sudo docker pull debian:testing - # will pull only the image named debian:testing and any intermediate layers - # it is based on. (Typically the empty `scratch` image, a MAINTAINER layer, + # will pull the image named ubuntu:trusty, ubuntu:14.04 + # which is an alias of the same image + # and any intermediate layers it is based on. + # (Typically the empty `scratch` image, a MAINTAINER layer, # and the un-tarred base). $ sudo docker pull --all-tags centos # will pull all the images from the centos repository diff --git a/graph/pull.go b/graph/pull.go index 600e524d81..0ac99d7caa 100644 --- a/graph/pull.go +++ b/graph/pull.go @@ -106,6 +106,7 @@ func (s *TagStore) pullRepository(r *registry.Session, out io.Writer, localName, log.Debugf("Registering tags") // If no tag has been specified, pull them all + var imageId string if askedTag == "" { for tag, id := range tagsList { repoData.ImgList[id].Tag = tag @@ -116,6 +117,7 @@ func (s *TagStore) pullRepository(r *registry.Session, out io.Writer, localName, if !exists { return fmt.Errorf("Tag %s not found in repository %s", askedTag, localName) } + imageId = id repoData.ImgList[id].Tag = askedTag } @@ -217,7 +219,7 @@ func (s *TagStore) pullRepository(r *registry.Session, out io.Writer, localName, } for tag, id := range tagsList { - if askedTag != "" && tag != askedTag { + if askedTag != "" && id != imageId { continue } if err := s.Set(localName, tag, id, true); err != nil { diff --git a/integration-cli/docker_cli_pull_test.go b/integration-cli/docker_cli_pull_test.go index c53945fdd7..cadabde815 100644 --- a/integration-cli/docker_cli_pull_test.go +++ b/integration-cli/docker_cli_pull_test.go @@ -6,6 +6,8 @@ import ( "testing" ) +// FIXME: we need a test for pulling all aliases for an image (issue #8141) + // pulling an image from the central registry should work func TestPullImageFromCentralRegistry(t *testing.T) { pullCmd := exec.Command(dockerBinary, "pull", "scratch") @@ -13,9 +15,9 @@ func TestPullImageFromCentralRegistry(t *testing.T) { errorOut(err, t, fmt.Sprintf("%s %s", out, err)) if err != nil || exitCode != 0 { - t.Fatal("pulling the busybox image from the registry has failed") + t.Fatal("pulling the scratch image from the registry has failed") } - logDone("pull - pull busybox") + logDone("pull - pull scratch") } // pulling a non-existing image from the central registry should return a non-zero exit code