|
@@ -373,15 +373,17 @@ func (cli *DockerCli) CmdWait(args ...string) error {
|
|
cmd.Usage()
|
|
cmd.Usage()
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
+ var encounteredError error
|
|
for _, name := range cmd.Args() {
|
|
for _, name := range cmd.Args() {
|
|
status, err := waitForExit(cli, name)
|
|
status, err := waitForExit(cli, name)
|
|
if err != nil {
|
|
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 {
|
|
} else {
|
|
fmt.Fprintf(cli.out, "%d\n", status)
|
|
fmt.Fprintf(cli.out, "%d\n", status)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil
|
|
|
|
|
|
+ return encounteredError
|
|
}
|
|
}
|
|
|
|
|
|
// 'docker version': show version information
|
|
// 'docker version': show version information
|
|
@@ -502,15 +504,17 @@ func (cli *DockerCli) CmdStop(args ...string) error {
|
|
v := url.Values{}
|
|
v := url.Values{}
|
|
v.Set("t", strconv.Itoa(*nSeconds))
|
|
v.Set("t", strconv.Itoa(*nSeconds))
|
|
|
|
|
|
|
|
+ var encounteredError error
|
|
for _, name := range cmd.Args() {
|
|
for _, name := range cmd.Args() {
|
|
_, _, err := cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil)
|
|
_, _, err := cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil)
|
|
if err != nil {
|
|
if err != nil {
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
|
+ encounteredError = fmt.Errorf("Error: failed to stop one or more containers")
|
|
} else {
|
|
} else {
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil
|
|
|
|
|
|
+ return encounteredError
|
|
}
|
|
}
|
|
|
|
|
|
func (cli *DockerCli) CmdRestart(args ...string) error {
|
|
func (cli *DockerCli) CmdRestart(args ...string) error {
|
|
@@ -527,15 +531,17 @@ func (cli *DockerCli) CmdRestart(args ...string) error {
|
|
v := url.Values{}
|
|
v := url.Values{}
|
|
v.Set("t", strconv.Itoa(*nSeconds))
|
|
v.Set("t", strconv.Itoa(*nSeconds))
|
|
|
|
|
|
|
|
+ var encounteredError error
|
|
for _, name := range cmd.Args() {
|
|
for _, name := range cmd.Args() {
|
|
_, _, err := cli.call("POST", "/containers/"+name+"/restart?"+v.Encode(), nil)
|
|
_, _, err := cli.call("POST", "/containers/"+name+"/restart?"+v.Encode(), nil)
|
|
if err != nil {
|
|
if err != nil {
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
|
+ encounteredError = fmt.Errorf("Error: failed to restart one or more containers")
|
|
} else {
|
|
} else {
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil
|
|
|
|
|
|
+ return encounteredError
|
|
}
|
|
}
|
|
|
|
|
|
func (cli *DockerCli) forwardAllSignals(cid string) chan os.Signal {
|
|
func (cli *DockerCli) forwardAllSignals(cid string) chan os.Signal {
|
|
@@ -769,15 +775,19 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ var encounteredError error
|
|
for _, name := range cmd.Args() {
|
|
for _, name := range cmd.Args() {
|
|
body, _, err := cli.call("DELETE", "/images/"+name, nil)
|
|
body, _, err := cli.call("DELETE", "/images/"+name, nil)
|
|
if err != 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 {
|
|
} else {
|
|
var outs []APIRmi
|
|
var outs []APIRmi
|
|
err = json.Unmarshal(body, &outs)
|
|
err = json.Unmarshal(body, &outs)
|
|
if err != nil {
|
|
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 {
|
|
for _, out := range outs {
|
|
if out.Deleted != "" {
|
|
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 {
|
|
func (cli *DockerCli) CmdHistory(args ...string) error {
|
|
@@ -867,15 +877,18 @@ func (cli *DockerCli) CmdRm(args ...string) error {
|
|
if *link {
|
|
if *link {
|
|
val.Set("link", "1")
|
|
val.Set("link", "1")
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ var encounteredError error
|
|
for _, name := range cmd.Args() {
|
|
for _, name := range cmd.Args() {
|
|
_, _, err := cli.call("DELETE", "/containers/"+name+"?"+val.Encode(), nil)
|
|
_, _, err := cli.call("DELETE", "/containers/"+name+"?"+val.Encode(), nil)
|
|
if err != nil {
|
|
if err != nil {
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
|
+ encounteredError = fmt.Errorf("Error: failed to remove one or more containers")
|
|
} else {
|
|
} else {
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil
|
|
|
|
|
|
+ return encounteredError
|
|
}
|
|
}
|
|
|
|
|
|
// 'docker kill NAME' kills a running container
|
|
// 'docker kill NAME' kills a running container
|
|
@@ -889,15 +902,16 @@ func (cli *DockerCli) CmdKill(args ...string) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ var encounteredError error
|
|
for _, name := range args {
|
|
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)
|
|
fmt.Fprintf(cli.err, "%s\n", err)
|
|
|
|
+ encounteredError = fmt.Errorf("Error: failed to kill one or more containers")
|
|
} else {
|
|
} else {
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
fmt.Fprintf(cli.out, "%s\n", name)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil
|
|
|
|
|
|
+ return encounteredError
|
|
}
|
|
}
|
|
|
|
|
|
func (cli *DockerCli) CmdImport(args ...string) error {
|
|
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 {
|
|
if len(body) == 0 {
|
|
return nil, resp.StatusCode, fmt.Errorf("Error: %s", http.StatusText(resp.StatusCode))
|
|
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
|
|
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 {
|
|
if len(body) == 0 {
|
|
return fmt.Errorf("Error :%s", http.StatusText(resp.StatusCode))
|
|
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") {
|
|
if matchesContentType(resp.Header.Get("Content-Type"), "application/json") {
|