diff --git a/client/client.go b/client/client.go index 6c5e6c4c99..164e1be321 100644 --- a/client/client.go +++ b/client/client.go @@ -89,6 +89,8 @@ func InteractiveMode(scripts ...string) error { "kill", "wait", "stop", + "start", + "restart", "logs", "diff", "commit", diff --git a/server/server.go b/server/server.go index 8e3224faf3..1cf01eb688 100644 --- a/server/server.go +++ b/server/server.go @@ -48,6 +48,8 @@ func (srv *Server) Help() string { {"kill", "Kill a running container"}, {"wait", "Wait for the state of a container to change"}, {"stop", "Stop a running container"}, + {"start", "Start a stopped container"}, + {"restart", "Restart a running container"}, {"logs", "Fetch the logs of a container"}, {"diff", "Inspect changes on a container's filesystem"}, {"commit", "Save the state of a container"}, @@ -94,6 +96,52 @@ func (srv *Server) CmdStop(stdin io.ReadCloser, stdout io.Writer, args ...string return nil } +func (srv *Server) CmdRestart(stdin io.ReadCloser, stdout io.Writer, args ...string) error { + cmd := rcli.Subcmd(stdout, "restart", "[OPTIONS] NAME", "Restart a running container") + if err := cmd.Parse(args); err != nil { + cmd.Usage() + return nil + } + if cmd.NArg() < 1 { + cmd.Usage() + return nil + } + for _, name := range cmd.Args() { + if container := srv.containers.Get(name); container != nil { + if err := container.Restart(); err != nil { + return err + } + fmt.Fprintln(stdout, container.Id) + } else { + return errors.New("No such container: " + name) + } + } + return nil +} + +func (srv *Server) CmdStart(stdin io.ReadCloser, stdout io.Writer, args ...string) error { + cmd := rcli.Subcmd(stdout, "start", "[OPTIONS] NAME", "Start a stopped container") + if err := cmd.Parse(args); err != nil { + cmd.Usage() + return nil + } + if cmd.NArg() < 1 { + cmd.Usage() + return nil + } + for _, name := range cmd.Args() { + if container := srv.containers.Get(name); container != nil { + if err := container.Start(); err != nil { + return err + } + fmt.Fprintln(stdout, container.Id) + } else { + return errors.New("No such container: " + name) + } + } + return nil +} + func (srv *Server) CmdUmount(stdin io.ReadCloser, stdout io.Writer, args ...string) error { cmd := rcli.Subcmd(stdout, "umount", "[OPTIONS] NAME", "umount a container's filesystem (debug only)") if err := cmd.Parse(args); err != nil {