From df86cb9a5c949530336b43100b303876f07c69ba Mon Sep 17 00:00:00 2001 From: unclejack Date: Sat, 20 Jul 2013 13:47:13 +0300 Subject: [PATCH] make docker run handle SIGINT/SIGTERM --- commands.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/commands.go b/commands.go index f0e1695b3f..db8a126696 100644 --- a/commands.go +++ b/commands.go @@ -1393,6 +1393,21 @@ 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 := <-signals + if sig == syscall.SIGINT || sig == syscall.SIGTERM { + 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:", err) + } + return + } + } + }() + 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