Implement docker wait with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>
Upstream-commit: 51efb1480a58b2317e1ad1833964ccad4456e6be
Component: engine
This commit is contained in:
David Calavera
2015-12-09 12:04:58 -05:00
parent b7a622c2a0
commit 8917bc241d
4 changed files with 26 additions and 18 deletions
+24
View File
@@ -0,0 +1,24 @@
package lib
import (
"encoding/json"
"github.com/docker/docker/api/types"
)
// ContainerWait pauses execution util a container is exits.
// It returns the API status code as response of its readiness.
func (cli *Client) ContainerWait(containerID string) (int, error) {
resp, err := cli.post("/containers/"+containerID+"/wait", nil, nil, nil)
if err != nil {
return -1, err
}
defer ensureReaderClosed(resp)
var res types.ContainerWaitResponse
if err := json.NewDecoder(resp.body).Decode(&res); err != nil {
return -1, err
}
return res.StatusCode, nil
}
+1 -1
View File
@@ -272,7 +272,7 @@ func (cli *DockerCli) CmdRun(args ...string) error {
// No Autoremove: Simply retrieve the exit code
if !config.Tty {
// In non-TTY mode, we can't detach, so we must wait for container exit
if status, err = waitForExit(cli, createResponse.ID); err != nil {
if status, err = cli.client.ContainerWait(createResponse.ID); err != nil {
return err
}
} else {
-16
View File
@@ -260,22 +260,6 @@ func (cli *DockerCli) resizeTty(id string, isExec bool) {
}
}
func waitForExit(cli *DockerCli, containerID string) (int, error) {
serverResp, err := cli.call("POST", "/containers/"+containerID+"/wait", nil, nil)
if err != nil {
return -1, err
}
defer serverResp.body.Close()
var res types.ContainerWaitResponse
if err := json.NewDecoder(serverResp.body).Decode(&res); err != nil {
return -1, err
}
return res.StatusCode, nil
}
// getExitCode perform an inspect on the container. It returns
// the running state and the exit code.
func getExitCode(cli *DockerCli, containerID string) (bool, int, error) {
+1 -1
View File
@@ -20,7 +20,7 @@ func (cli *DockerCli) CmdWait(args ...string) error {
var errNames []string
for _, name := range cmd.Args() {
status, err := waitForExit(cli, name)
status, err := cli.client.ContainerWait(name)
if err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
errNames = append(errNames, name)