diff --git a/docs/reference/commandline/load.md b/docs/reference/commandline/load.md index 0b40fde2f3c7ded4c3d27bb46c949413fb4a24ce..60f4076c77f3d833f800c5a9ec060a09eee7fb71 100644 --- a/docs/reference/commandline/load.md +++ b/docs/reference/commandline/load.md @@ -12,11 +12,12 @@ parent = "smn_cli" Usage: docker load [OPTIONS] - Load an image from a tar archive or STDIN + Load an image from a tar archive or STDIN and shows image names or + IDs imported. --help Print usage -i, --input="" Read from a tar archive file, instead of STDIN. The tarball may be compressed with gzip, bzip, or xz - -q, --quiet Suppress the load output. Without this option, a progress bar is displayed. + -q, --quiet Suppress the load progress bar but still outputs the imported images Loads a tarred repository from a file or the standard input stream. Restores both images and tags. @@ -24,10 +25,17 @@ Restores both images and tags. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE $ docker load < busybox.tar.gz + # […] + Loaded image: busybox:latest $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 769b9341d937 7 weeks ago 2.489 MB $ docker load --input fedora.tar + # […] + Loaded image: fedora:rawhide + # […] + Loaded image: fedora:20 + # […] $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 769b9341d937 7 weeks ago 2.489 MB diff --git a/image/tarexport/load.go b/image/tarexport/load.go index 22e6442dfb6bd613a1f31486c40b446003cd1f83..59a499d6e3b08d0b6ecc95dde196b8a961703008 100644 --- a/image/tarexport/load.go +++ b/image/tarexport/load.go @@ -62,6 +62,8 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool) } var parentLinks []parentLink + var imageIDsStr string + var imageRefCount int for _, m := range manifest { configPath, err := safePath(tmpDir, m.Config) @@ -109,7 +111,9 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool) if err != nil { return err } + imageIDsStr += fmt.Sprintf("Loaded image ID: %s\n", imgID) + imageRefCount = 0 for _, repoTag := range m.RepoTags { named, err := reference.ParseNamed(repoTag) if err != nil { @@ -120,6 +124,8 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool) return fmt.Errorf("invalid tag %q", repoTag) } l.setLoadedTag(ref, imgID, outStream) + outStream.Write([]byte(fmt.Sprintf("Loaded image: %s\n", ref))) + imageRefCount++ } parentLinks = append(parentLinks, parentLink{imgID, m.Parent}) @@ -134,6 +140,10 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool) } } + if imageRefCount == 0 { + outStream.Write([]byte(imageIDsStr)) + } + return nil } diff --git a/integration-cli/docker_cli_save_load_test.go b/integration-cli/docker_cli_save_load_test.go index 514c040c536a801c26cb14e4deeac9f576659272..869bf6bf88307ec7d67b2762b357c37d8fbfb6e6 100644 --- a/integration-cli/docker_cli_save_load_test.go +++ b/integration-cli/docker_cli_save_load_test.go @@ -350,3 +350,33 @@ func (s *DockerSuite) TestSaveLoadParents(c *check.C) { inspectOut = inspectField(c, idFoo, "Parent") c.Assert(inspectOut, checker.Equals, "") } + +func (s *DockerSuite) TestSaveLoadNoTag(c *check.C) { + testRequires(c, DaemonIsLinux) + + name := "saveloadnotag" + + _, err := buildImage(name, "FROM busybox\nENV foo=bar", true) + c.Assert(err, checker.IsNil, check.Commentf("%v", err)) + + id := inspectField(c, name, "Id") + + // Test to make sure that save w/o name just shows imageID during load + out, _, err := runCommandPipelineWithOutput( + exec.Command(dockerBinary, "save", id), + exec.Command(dockerBinary, "load")) + c.Assert(err, checker.IsNil, check.Commentf("failed to save and load repo: %s, %v", out, err)) + + // Should not show 'name' but should show the image ID during the load + c.Assert(out, checker.Not(checker.Contains), "Loaded image: ") + c.Assert(out, checker.Contains, "Loaded image ID:") + c.Assert(out, checker.Contains, id) + + // Test to make sure that save by name shows that name during load + out, _, err = runCommandPipelineWithOutput( + exec.Command(dockerBinary, "save", name), + exec.Command(dockerBinary, "load")) + c.Assert(err, checker.IsNil, check.Commentf("failed to save and load repo: %s, %v", out, err)) + c.Assert(out, checker.Contains, "Loaded image: "+name+":latest") + c.Assert(out, checker.Not(checker.Contains), "Loaded image ID:") +} diff --git a/man/docker-load.1.md b/man/docker-load.1.md index c54fe607b95a30e84f5e8f36c46b4fa161894d95..b165173047244b531c0dcc982c5e0abd82033694 100644 --- a/man/docker-load.1.md +++ b/man/docker-load.1.md @@ -13,7 +13,8 @@ docker-load - Load an image from a tar archive or STDIN # DESCRIPTION Loads a tarred repository from a file or the standard input stream. -Restores both images and tags. +Restores both images and tags. Write image names or IDs imported it +standard output stream. # OPTIONS **--help** @@ -23,7 +24,7 @@ Restores both images and tags. Read from a tar archive file, instead of STDIN. The tarball may be compressed with gzip, bzip, or xz. **-q**, **--quiet** - Suppress the load output. Without this option, a progress bar is displayed. + Suppress the load progress bar but still outputs the imported images. # EXAMPLES @@ -31,6 +32,11 @@ Restores both images and tags. REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 769b9341d937 7 weeks ago 2.489 MB $ docker load --input fedora.tar + # […] + Loaded image: fedora:rawhide + # […] + Loaded image: fedora:20 + # […] $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 769b9341d937 7 weeks ago 2.489 MB @@ -47,3 +53,4 @@ April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal work. June 2014, updated by Sven Dowideit July 2015 update by Mary Anthony +June 2016 update by Vincent Demeester