diff --git a/api/client/lib/container_commit.go b/api/client/lib/container_commit.go index 9dc3440282..c097e65902 100644 --- a/api/client/lib/container_commit.go +++ b/api/client/lib/container_commit.go @@ -51,8 +51,7 @@ func (cli *Client) ContainerCommit(options types.ContainerCommitOptions) (types. if err != nil { return response, err } - - defer resp.body.Close() + defer ensureReaderClosed(resp) if err := json.NewDecoder(resp.body).Decode(&response); err != nil { return response, err diff --git a/api/client/lib/container_create.go b/api/client/lib/container_create.go index 906307f095..26a85e3b4b 100644 --- a/api/client/lib/container_create.go +++ b/api/client/lib/container_create.go @@ -29,11 +29,13 @@ func (cli *Client) ContainerCreate(config *runconfig.ContainerConfigWrapper, con } if serverResp.statusCode == 404 && strings.Contains(err.Error(), config.Image) { + return response, imageNotFoundError{config.Image} } if err != nil { return response, err } + defer ensureReaderClosed(serverResp) if err := json.NewDecoder(serverResp.body).Decode(&response); err != nil { return response, err diff --git a/api/client/lib/container_inspect.go b/api/client/lib/container_inspect.go index 73863aafee..038c11ef1c 100644 --- a/api/client/lib/container_inspect.go +++ b/api/client/lib/container_inspect.go @@ -12,7 +12,7 @@ func (cli *Client) ContainerInspect(containerID string) (types.ContainerJSON, er if err != nil { return types.ContainerJSON{}, err } - defer serverResp.body.Close() + defer ensureReaderClosed(serverResp) var response types.ContainerJSON json.NewDecoder(serverResp.body).Decode(&response) diff --git a/api/client/lib/copy.go b/api/client/lib/copy.go index ed982220b6..c1b8593a98 100644 --- a/api/client/lib/copy.go +++ b/api/client/lib/copy.go @@ -51,6 +51,7 @@ func (cli *Client) CopyToContainer(options CopyToContainerOptions) error { if err != nil { return err } + defer ensureReaderClosed(response) if response.statusCode != http.StatusOK { return fmt.Errorf("unexpected status code from daemon: %d", response.statusCode) diff --git a/api/client/lib/diff.go b/api/client/lib/diff.go index f0d027afc1..bf3c0ee838 100644 --- a/api/client/lib/diff.go +++ b/api/client/lib/diff.go @@ -15,7 +15,7 @@ func (cli *Client) ContainerDiff(containerID string) ([]types.ContainerChange, e if err != nil { return changes, err } - defer serverResp.body.Close() + defer ensureReaderClosed(serverResp) if err := json.NewDecoder(serverResp.body).Decode(&changes); err != nil { return changes, err diff --git a/api/client/lib/history.go b/api/client/lib/history.go index 29064c65fb..62f96e6202 100644 --- a/api/client/lib/history.go +++ b/api/client/lib/history.go @@ -14,7 +14,7 @@ func (cli *Client) ImageHistory(imageID string) ([]types.ImageHistory, error) { if err != nil { return history, err } - defer serverResp.body.Close() + defer ensureReaderClosed(serverResp) if err := json.NewDecoder(serverResp.body).Decode(&history); err != nil { return history, err diff --git a/api/client/lib/image_list.go b/api/client/lib/image_list.go index b86c3e944a..e34cc0026f 100644 --- a/api/client/lib/image_list.go +++ b/api/client/lib/image_list.go @@ -41,7 +41,7 @@ func (cli *Client) ImageList(options ImageListOptions) ([]types.Image, error) { if err != nil { return images, err } - defer serverResp.body.Close() + defer ensureReaderClosed(serverResp) err = json.NewDecoder(serverResp.body).Decode(&images) return images, err diff --git a/api/client/lib/info.go b/api/client/lib/info.go index 4b4bd048a0..b9a0fabf7b 100644 --- a/api/client/lib/info.go +++ b/api/client/lib/info.go @@ -15,7 +15,7 @@ func (cli *Client) Info() (types.Info, error) { if err != nil { return info, err } - defer serverResp.body.Close() + defer ensureReaderClosed(serverResp) if err := json.NewDecoder(serverResp.body).Decode(&info); err != nil { return info, fmt.Errorf("Error reading remote info: %v", err) diff --git a/api/client/lib/kill.go b/api/client/lib/kill.go index 40ce9d383f..3e80d70ada 100644 --- a/api/client/lib/kill.go +++ b/api/client/lib/kill.go @@ -7,6 +7,7 @@ func (cli *Client) ContainerKill(containerID, signal string) error { var query url.Values query.Set("signal", signal) - _, err := cli.POST("/containers/"+containerID+"/kill", query, nil, nil) + resp, err := cli.POST("/containers/"+containerID+"/kill", query, nil, nil) + ensureReaderClosed(resp) return err } diff --git a/api/client/lib/login.go b/api/client/lib/login.go index ca194150ed..77399ce985 100644 --- a/api/client/lib/login.go +++ b/api/client/lib/login.go @@ -20,7 +20,7 @@ func (cli *Client) RegistryLogin(auth cliconfig.AuthConfig) (types.AuthResponse, if err != nil { return types.AuthResponse{}, err } - defer resp.body.Close() + defer ensureReaderClosed(resp) var response types.AuthResponse err = json.NewDecoder(resp.body).Decode(&response)