Pull all image aliases for id. Closes #8141.

Docker-DCO-1.1-Signed-off-by: Jessica Frazelle <jess@docker.com> (github: jfrazelle)
This commit is contained in:
Jessica Frazelle 2014-09-23 15:58:05 -07:00
parent 27567e5593
commit 7d74be162c
3 changed files with 14 additions and 7 deletions

View File

@ -965,10 +965,13 @@ To download a particular image, or set of images (i.e., a repository),
use `docker pull`: use `docker pull`:
$ sudo docker pull debian $ 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 $ sudo docker pull debian:testing
# will pull only the image named debian:testing and any intermediate layers # will pull the image named ubuntu:trusty, ubuntu:14.04
# it is based on. (Typically the empty `scratch` image, a MAINTAINER layer, # 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). # and the un-tarred base).
$ sudo docker pull --all-tags centos $ sudo docker pull --all-tags centos
# will pull all the images from the centos repository # will pull all the images from the centos repository

View File

@ -106,6 +106,7 @@ func (s *TagStore) pullRepository(r *registry.Session, out io.Writer, localName,
log.Debugf("Registering tags") log.Debugf("Registering tags")
// If no tag has been specified, pull them all // If no tag has been specified, pull them all
var imageId string
if askedTag == "" { if askedTag == "" {
for tag, id := range tagsList { for tag, id := range tagsList {
repoData.ImgList[id].Tag = tag repoData.ImgList[id].Tag = tag
@ -116,6 +117,7 @@ func (s *TagStore) pullRepository(r *registry.Session, out io.Writer, localName,
if !exists { if !exists {
return fmt.Errorf("Tag %s not found in repository %s", askedTag, localName) return fmt.Errorf("Tag %s not found in repository %s", askedTag, localName)
} }
imageId = id
repoData.ImgList[id].Tag = askedTag 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 { for tag, id := range tagsList {
if askedTag != "" && tag != askedTag { if askedTag != "" && id != imageId {
continue continue
} }
if err := s.Set(localName, tag, id, true); err != nil { if err := s.Set(localName, tag, id, true); err != nil {

View File

@ -6,6 +6,8 @@ import (
"testing" "testing"
) )
// FIXME: we need a test for pulling all aliases for an image (issue #8141)
// pulling an image from the central registry should work // pulling an image from the central registry should work
func TestPullImageFromCentralRegistry(t *testing.T) { func TestPullImageFromCentralRegistry(t *testing.T) {
pullCmd := exec.Command(dockerBinary, "pull", "scratch") pullCmd := exec.Command(dockerBinary, "pull", "scratch")
@ -13,9 +15,9 @@ func TestPullImageFromCentralRegistry(t *testing.T) {
errorOut(err, t, fmt.Sprintf("%s %s", out, err)) errorOut(err, t, fmt.Sprintf("%s %s", out, err))
if err != nil || exitCode != 0 { 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 // pulling a non-existing image from the central registry should return a non-zero exit code