diff --git a/commands.go b/commands.go index 4c0e5e3d8a..9d144d8aeb 100644 --- a/commands.go +++ b/commands.go @@ -373,15 +373,17 @@ func (cli *DockerCli) CmdWait(args ...string) error { cmd.Usage() return nil } + var encounteredError error for _, name := range cmd.Args() { status, err := waitForExit(cli, name) if err != nil { - fmt.Fprintf(cli.err, "%s", err) + fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to wait one or more containers") } else { fmt.Fprintf(cli.out, "%d\n", status) } } - return nil + return encounteredError } // 'docker version': show version information @@ -502,15 +504,17 @@ func (cli *DockerCli) CmdStop(args ...string) error { v := url.Values{} v.Set("t", strconv.Itoa(*nSeconds)) + var encounteredError error for _, name := range cmd.Args() { _, _, err := cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to stop one or more containers") } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return nil + return encounteredError } func (cli *DockerCli) CmdRestart(args ...string) error { @@ -527,15 +531,17 @@ func (cli *DockerCli) CmdRestart(args ...string) error { v := url.Values{} v.Set("t", strconv.Itoa(*nSeconds)) + var encounteredError error for _, name := range cmd.Args() { _, _, err := cli.call("POST", "/containers/"+name+"/restart?"+v.Encode(), nil) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to restart one or more containers") } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return nil + return encounteredError } func (cli *DockerCli) forwardAllSignals(cid string) chan os.Signal { @@ -769,15 +775,19 @@ func (cli *DockerCli) CmdRmi(args ...string) error { return nil } + var encounteredError error for _, name := range cmd.Args() { body, _, err := cli.call("DELETE", "/images/"+name, nil) if err != nil { - fmt.Fprintf(cli.err, "%s", err) + fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to remove one or more images") } else { var outs []APIRmi err = json.Unmarshal(body, &outs) if err != nil { - return err + fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to remove one or more images") + continue } for _, out := range outs { if out.Deleted != "" { @@ -788,7 +798,7 @@ func (cli *DockerCli) CmdRmi(args ...string) error { } } } - return nil + return encounteredError } func (cli *DockerCli) CmdHistory(args ...string) error { @@ -867,15 +877,18 @@ func (cli *DockerCli) CmdRm(args ...string) error { if *link { val.Set("link", "1") } + + var encounteredError error for _, name := range cmd.Args() { _, _, err := cli.call("DELETE", "/containers/"+name+"?"+val.Encode(), nil) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to remove one or more containers") } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return nil + return encounteredError } // 'docker kill NAME' kills a running container @@ -889,15 +902,16 @@ func (cli *DockerCli) CmdKill(args ...string) error { return nil } + var encounteredError error for _, name := range args { - _, _, err := cli.call("POST", "/containers/"+name+"/kill", nil) - if err != nil { + if _, _, err := cli.call("POST", "/containers/"+name+"/kill", nil); err != nil { fmt.Fprintf(cli.err, "%s\n", err) + encounteredError = fmt.Errorf("Error: failed to kill one or more containers") } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return nil + return encounteredError } func (cli *DockerCli) CmdImport(args ...string) error { @@ -1995,7 +2009,7 @@ func (cli *DockerCli) call(method, path string, data interface{}) ([]byte, int, if len(body) == 0 { return nil, resp.StatusCode, fmt.Errorf("Error: %s", http.StatusText(resp.StatusCode)) } - return nil, resp.StatusCode, fmt.Errorf("Error: %s", body) + return nil, resp.StatusCode, fmt.Errorf("Error: %s", bytes.TrimSpace(body)) } return body, resp.StatusCode, nil } @@ -2051,7 +2065,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h if len(body) == 0 { return fmt.Errorf("Error :%s", http.StatusText(resp.StatusCode)) } - return fmt.Errorf("Error: %s", body) + return fmt.Errorf("Error: %s", bytes.TrimSpace(body)) } if matchesContentType(resp.Header.Get("Content-Type"), "application/json") {