Parcourir la source

'docker start' and 'docker restart': start or restart a container

Solomon Hykes il y a 12 ans
Parent
commit
d2885910bd
2 fichiers modifiés avec 50 ajouts et 0 suppressions
  1. 2 0
      client/client.go
  2. 48 0
      server/server.go

+ 2 - 0
client/client.go

@@ -89,6 +89,8 @@ func InteractiveMode(scripts ...string) error {
 		"kill",
 		"wait",
 		"stop",
+		"start",
+		"restart",
 		"logs",
 		"diff",
 		"commit",

+ 48 - 0
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 {