1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Implement docker wait with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>
This commit is contained in:
David Calavera 2015-12-04 14:38:15 -05:00
parent 1fe912151b
commit 51efb1480a
4 changed files with 26 additions and 18 deletions

24
api/client/lib/wait.go Normal file
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
}

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 {

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) {

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)