Browse Source

Merge pull request #1249 from unclejack/507-add_sigterm_sigint_handling_to_docker_run

#507 - make docker run handle SIGINT/SIGTERM
Michael Crosby 12 years ago
parent
commit
84a0274885
1 changed files with 11 additions and 0 deletions
  1. 11 0
      commands.go

+ 11 - 0
commands.go

@@ -1471,6 +1471,17 @@ func (cli *DockerCli) CmdRun(args ...string) error {
 			v.Set("stderr", "1")
 		}
 
+		signals := make(chan os.Signal, 1)
+		signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
+		go func() {
+			for sig := range signals {
+				fmt.Printf("\nReceived signal: %s; cleaning up\n", sig)
+				if err := cli.CmdStop("-t", "4", runResult.ID); err != nil {
+					fmt.Printf("failed to stop container: %v", err)
+				}
+			}
+		}()
+
 		if err := cli.hijack("POST", "/containers/"+runResult.ID+"/attach?"+v.Encode(), config.Tty, cli.in, cli.out); err != nil {
 			utils.Debugf("Error hijack: %s", err)
 			return err