Browse code

Implement docker stop with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>

David Calavera authored on 2015/12/05 03:38:31
Showing 2 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+package lib
1
+
2
+import (
3
+	"net/url"
4
+	"strconv"
5
+)
6
+
7
+// ContainerStop stops a container without terminating the process.
8
+// The process is blocked until the container stops or the timeout expires.
9
+func (cli *Client) ContainerStop(containerID string, timeout int) error {
10
+	var query url.Values
11
+	query.Set("t", strconv.Itoa(timeout))
12
+	resp, err := cli.POST("/containers/"+containerID+"/stop", query, nil, nil)
13
+	ensureReaderClosed(resp)
14
+	return err
15
+}
... ...
@@ -2,8 +2,6 @@ package client
2 2
 
3 3
 import (
4 4
 	"fmt"
5
-	"net/url"
6
-	"strconv"
7 5
 
8 6
 	Cli "github.com/docker/docker/cli"
9 7
 	flag "github.com/docker/docker/pkg/mflag"
... ...
@@ -21,13 +19,9 @@ func (cli *DockerCli) CmdStop(args ...string) error {
21 21
 
22 22
 	cmd.ParseFlags(args, true)
23 23
 
24
-	v := url.Values{}
25
-	v.Set("t", strconv.Itoa(*nSeconds))
26
-
27 24
 	var errNames []string
28 25
 	for _, name := range cmd.Args() {
29
-		_, _, err := readBody(cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil, nil))
30
-		if err != nil {
26
+		if err := cli.client.ContainerStop(name, *nSeconds); err != nil {
31 27
 			fmt.Fprintf(cli.err, "%s\n", err)
32 28
 			errNames = append(errNames, name)
33 29
 		} else {