Pull all image aliases for id. Closes #8141.

Docker-DCO-1.1-Signed-off-by: Jessica Frazelle <jess@docker.com> (github: jfrazelle)
Upstream-commit: 7d74be162c9704df848c865a9b4bcd4047da9124
Component: engine
This commit is contained in:
Jessica Frazelle
2014-09-25 11:48:49 -07:00
parent 0cb047b7d8
commit 4092cbb7ff
3 changed files with 14 additions and 7 deletions
@@ -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
+3 -1
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 {
@@ -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