Bladeren bron

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

Carry #23007 :  Say something useful during docker load
Brian Goff 9 jaren geleden
bovenliggende
commit
9db33b7646
4 gewijzigde bestanden met toevoegingen van 59 en 4 verwijderingen
  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]
 
-    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

+ 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 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
 }
 

+ 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")
 	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
 
 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 <SvenDowideit@home.org.au>
 July 2015 update by Mary Anthony <mary@docker.com>
+June 2016 update by Vincent Demeester <vincent@sbr.pm>