Skip to content

Commit 96d7db6

Browse files
committed
Fix docker load progressbar, fixes #21957
Signed-off-by: Lei Jitang <[email protected]>
1 parent 577adcc commit 96d7db6

4 files changed

Lines changed: 33 additions & 2 deletions

File tree

api/client/load.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (cli *DockerCli) CmdLoad(args ...string) error {
4141
}
4242
defer response.Body.Close()
4343

44-
if response.JSON {
44+
if response.Body != nil && response.JSON {
4545
return jsonmessage.DisplayJSONMessagesStream(response.Body, cli.out, cli.outFd, cli.isTerminalOut, nil)
4646
}
4747

api/server/router/image/image_routes.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,17 @@ func (s *imageRouter) postImagesLoad(ctx context.Context, w http.ResponseWriter,
206206
return err
207207
}
208208
quiet := httputils.BoolValueOrDefault(r, "quiet", true)
209-
w.Header().Set("Content-Type", "application/json")
209+
210+
if !quiet {
211+
w.Header().Set("Content-Type", "application/json")
212+
213+
output := ioutils.NewWriteFlusher(w)
214+
defer output.Close()
215+
if err := s.backend.LoadImage(r.Body, output, quiet); err != nil {
216+
output.Write(streamformatter.NewJSONStreamFormatter().FormatError(err))
217+
}
218+
return nil
219+
}
210220
return s.backend.LoadImage(r.Body, w, quiet)
211221
}
212222

image/tarexport/load.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func (l *tarexporter) Load(inTar io.ReadCloser, outStream io.Writer, quiet bool)
2929
)
3030
if !quiet {
3131
progressOutput = sf.NewProgressOutput(outStream, false)
32+
outStream = &streamformatter.StdoutFormatter{Writer: outStream, StreamFormatter: streamformatter.NewJSONStreamFormatter()}
3233
}
3334

3435
tmpDir, err := ioutil.TempDir("", "docker-import-")

integration-cli/docker_cli_save_load_unix_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package main
44

55
import (
6+
"fmt"
67
"io/ioutil"
78
"os"
89
"os/exec"
@@ -65,3 +66,22 @@ func (s *DockerSuite) TestSaveAndLoadRepoStdout(c *check.C) {
6566
c.Assert(err, check.IsNil) //could not read tty output
6667
c.Assert(string(buf[:n]), checker.Contains, "Cowardly refusing", check.Commentf("help output is not being yielded", out))
6768
}
69+
70+
func (s *DockerSuite) TestSaveAndLoadWithProgressBar(c *check.C) {
71+
name := "test-load"
72+
_, err := buildImage(name, `
73+
FROM busybox
74+
RUN touch aa
75+
`, true)
76+
c.Assert(err, check.IsNil)
77+
78+
tmptar := name + ".tar"
79+
dockerCmd(c, "save", "-o", tmptar, name)
80+
defer os.Remove(tmptar)
81+
82+
dockerCmd(c, "rmi", name)
83+
dockerCmd(c, "tag", "busybox", name)
84+
out, _ := dockerCmd(c, "load", "-i", tmptar)
85+
expected := fmt.Sprintf("The image %s:latest already exists, renaming the old one with ID", name)
86+
c.Assert(out, checker.Contains, expected)
87+
}

0 commit comments

Comments
 (0)