dotcloud/docker

View on GitHub
client/container_restart.go

Summary

Maintainability
A
1 hr
Test Coverage
package client // import "github.com/docker/docker/client"

import (
    "context"
    "net/url"
    "strconv"

    "github.com/docker/docker/api/types/container"
    "github.com/docker/docker/api/types/versions"
)

// ContainerRestart stops and starts a container again.
// It makes the daemon wait for the container to be up again for
// a specific amount of time, given the timeout.
func (cli *Client) ContainerRestart(ctx context.Context, containerID string, options container.StopOptions) error {
    query := url.Values{}
    if options.Timeout != nil {
        query.Set("t", strconv.Itoa(*options.Timeout))
    }
    if options.Signal != "" {
        // Make sure we negotiated (if the client is configured to do so),
        // as code below contains API-version specific handling of options.
        //
        // Normally, version-negotiation (if enabled) would not happen until
        // the API request is made.
        if err := cli.checkVersion(ctx); err != nil {
            return err
        }
        if versions.GreaterThanOrEqualTo(cli.version, "1.42") {
            query.Set("signal", options.Signal)
        }
    }
    resp, err := cli.post(ctx, "/containers/"+containerID+"/restart", query, nil, nil)
    ensureReaderClosed(resp)
    return err
}