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`:
$ 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

View File

@ -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 {

View File

@ -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