瀏覽代碼

Merge pull request #23377 from vdemeester/carry-pr-23007

Carry #23007 :  Say something useful during docker load
Brian Goff 9 年之前
父節點
當前提交
9db33b7646
共有 4 個文件被更改,包括 59 次插入4 次删除
  1. 10 2
      docs/reference/commandline/load.md
  2. 10 0
      image/tarexport/load.go
  3. 30 0
      integration-cli/docker_cli_save_load_test.go
  4. 9 2
      man/docker-load.1.md

+ 10 - 2
docs/reference/commandline/load.md

@@ -12,11 +12,12 @@ parent = "smn_cli"
 
 
     Usage: docker load [OPTIONS]
     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
       --help             Print usage
       -i, --input=""     Read from a tar archive file, instead of STDIN. The tarball may be compressed with gzip, bzip, or xz
       -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.
 Loads a tarred repository from a file or the standard input stream.
 Restores both images and tags.
 Restores both images and tags.
@@ -24,10 +25,17 @@ Restores both images and tags.
     $ docker images
     $ docker images
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     $ docker load < busybox.tar.gz
     $ docker load < busybox.tar.gz
+    # […]
+    Loaded image: busybox:latest
     $ docker images
     $ docker images
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB
     $ docker load --input fedora.tar
     $ docker load --input fedora.tar
+    # […]
+    Loaded image: fedora:rawhide
+    # […]
+    Loaded image: fedora:20
+    # […]
     $ docker images
     $ docker images
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB

+ 10 - 0
image/tarexport/load.go

@@ -62,6 +62,8 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool)
 	}
 	}
 
 
 	var parentLinks []parentLink
 	var parentLinks []parentLink
+	var imageIDsStr string
+	var imageRefCount int
 
 
 	for _, m := range manifest {
 	for _, m := range manifest {
 		configPath, err := safePath(tmpDir, m.Config)
 		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 {
 		if err != nil {
 			return err
 			return err
 		}
 		}
+		imageIDsStr += fmt.Sprintf("Loaded image ID: %s\n", imgID)
 
 
+		imageRefCount = 0
 		for _, repoTag := range m.RepoTags {
 		for _, repoTag := range m.RepoTags {
 			named, err := reference.ParseNamed(repoTag)
 			named, err := reference.ParseNamed(repoTag)
 			if err != nil {
 			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)
 				return fmt.Errorf("invalid tag %q", repoTag)
 			}
 			}
 			l.setLoadedTag(ref, imgID, outStream)
 			l.setLoadedTag(ref, imgID, outStream)
+			outStream.Write([]byte(fmt.Sprintf("Loaded image: %s\n", ref)))
+			imageRefCount++
 		}
 		}
 
 
 		parentLinks = append(parentLinks, parentLink{imgID, m.Parent})
 		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
 	return nil
 }
 }
 
 

+ 30 - 0
integration-cli/docker_cli_save_load_test.go

@@ -350,3 +350,33 @@ func (s *DockerSuite) TestSaveLoadParents(c *check.C) {
 	inspectOut = inspectField(c, idFoo, "Parent")
 	inspectOut = inspectField(c, idFoo, "Parent")
 	c.Assert(inspectOut, checker.Equals, "")
 	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:")
+}

+ 9 - 2
man/docker-load.1.md

@@ -13,7 +13,8 @@ docker-load - Load an image from a tar archive or STDIN
 # DESCRIPTION
 # DESCRIPTION
 
 
 Loads a tarred repository from a file or the standard input stream.
 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
 # OPTIONS
 **--help**
 **--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.
    Read from a tar archive file, instead of STDIN. The tarball may be compressed with gzip, bzip, or xz.
 
 
 **-q**, **--quiet**
 **-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
 # EXAMPLES
 
 
@@ -31,6 +32,11 @@ Restores both images and tags.
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB
     $ docker load --input fedora.tar
     $ docker load --input fedora.tar
+    # […]
+    Loaded image: fedora:rawhide
+    # […]
+    Loaded image: fedora:20
+    # […]
     $ docker images
     $ docker images
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
     busybox             latest              769b9341d937        7 weeks ago         2.489 MB
     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.
 based on docker.com source material and internal work.
 June 2014, updated by Sven Dowideit <SvenDowideit@home.org.au>
 June 2014, updated by Sven Dowideit <SvenDowideit@home.org.au>
 July 2015 update by Mary Anthony <mary@docker.com>
 July 2015 update by Mary Anthony <mary@docker.com>
+June 2016 update by Vincent Demeester <vincent@sbr.pm>