// ContainerRestart stops and starts a container. It attempts to // gracefully stop the container within the given timeout, forcefully // stopping it if the timeout is exceeded. If given a negative // timeout, ContainerRestart will wait forever until a graceful // stop. Returns an error if the container cannot be found, or if // there is an underlying error at any stage of the restart. func (daemon *Daemon) ContainerRestart(name string, seconds *int) error { container, err := daemon.GetContainer(name) if err != nil { return err } if seconds == nil { stopTimeout := container.StopTimeout() seconds = &stopTimeout } if err := daemon.containerRestart(container, *seconds); err != nil { return fmt.Errorf("Cannot restart container %s: %v", name, err) } return nil }
// ContainerStop looks for the given container and terminates it, // waiting the given number of seconds before forcefully killing the // container. If a negative number of seconds is given, ContainerStop // will wait for a graceful termination. An error is returned if the // container is not found, is already stopped, or if there is a // problem stopping the container. func (daemon *Daemon) ContainerStop(name string, seconds *int) error { container, err := daemon.GetContainer(name) if err != nil { return err } if !container.IsRunning() { err := fmt.Errorf("Container %s is already stopped", name) return errors.NewErrorWithStatusCode(err, http.StatusNotModified) } if seconds == nil { stopTimeout := container.StopTimeout() seconds = &stopTimeout } if err := daemon.containerStop(container, *seconds); err != nil { return fmt.Errorf("Cannot stop container %s: %v", name, err) } return nil }