From 6aa7cf16be0be091ffb41176ea24c7f281d780d8 Mon Sep 17 00:00:00 2001 From: Lei Jitang Date: Tue, 26 May 2015 09:25:34 +0800 Subject: [PATCH] Ensure all the running containers are killed on daemon shutdown Signed-off-by: Lei Jitang Upstream-commit: bdb77078b5b93c3075aa258e1c04a5a5c893430f Component: engine --- components/engine/daemon/daemon.go | 5 +++-- .../integration-cli/docker_cli_daemon_test.go | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/components/engine/daemon/daemon.go b/components/engine/daemon/daemon.go index 0246dd0a86..578aa06062 100644 --- a/components/engine/daemon/daemon.go +++ b/components/engine/daemon/daemon.go @@ -1003,8 +1003,9 @@ func (daemon *Daemon) Shutdown() error { go func() { defer group.Done() - if err := c.KillSig(15); err != nil { - logrus.Debugf("kill 15 error for %s - %s", c.ID, err) + // If container failed to exit in 10 seconds of SIGTERM, then using the force + if err := c.Stop(10); err != nil { + logrus.Errorf("Stop container %s with error: %v", c.ID, err) } c.WaitStop(-1 * time.Second) logrus.Debugf("container stopped %s", c.ID) diff --git a/components/engine/integration-cli/docker_cli_daemon_test.go b/components/engine/integration-cli/docker_cli_daemon_test.go index d668781dcf..eaa7782e0a 100644 --- a/components/engine/integration-cli/docker_cli_daemon_test.go +++ b/components/engine/integration-cli/docker_cli_daemon_test.go @@ -1165,3 +1165,19 @@ func (s *DockerDaemonSuite) TestRunContainerWithBridgeNone(c *check.C) { c.Assert(strings.Contains(out, "eth0"), check.Equals, false, check.Commentf("There shouldn't be eth0 in container when network is disabled: %s", out)) } + +func (s *DockerDaemonSuite) TestDaemonRestartWithContainerRunning(t *check.C) { + if err := s.d.StartWithBusybox(); err != nil { + t.Fatal(err) + } + if out, err := s.d.Cmd("run", "-ti", "-d", "--name", "test", "busybox"); err != nil { + t.Fatal(out, err) + } + if err := s.d.Restart(); err != nil { + t.Fatal(err) + } + // Container 'test' should be removed without error + if out, err := s.d.Cmd("rm", "test"); err != nil { + t.Fatal(out, err) + } +}