Forráskód Böngészése

Merge pull request #12400 from coolljt0725/kill_all_containers_on_daemon_shutdown

Ensure all the running containers are killed on daemon shutdown
David Calavera 10 éve
szülő
commit
04c6f09fbd
2 módosított fájl, 19 hozzáadás és 2 törlés
  1. 3 2
      daemon/daemon.go
  2. 16 0
      integration-cli/docker_cli_daemon_test.go

+ 3 - 2
daemon/daemon.go

@@ -986,8 +986,9 @@ func (daemon *Daemon) Shutdown() error {
 
 
 				go func() {
 				go func() {
 					defer group.Done()
 					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)
 					c.WaitStop(-1 * time.Second)
 					logrus.Debugf("container stopped %s", c.ID)
 					logrus.Debugf("container stopped %s", c.ID)

+ 16 - 0
integration-cli/docker_cli_daemon_test.go

@@ -1166,3 +1166,19 @@ func (s *DockerDaemonSuite) TestRunContainerWithBridgeNone(c *check.C) {
 	c.Assert(strings.Contains(out, "eth0"), check.Equals, false,
 	c.Assert(strings.Contains(out, "eth0"), check.Equals, false,
 		check.Commentf("There shouldn't be eth0 in container when network is disabled: %s", out))
 		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)
+	}
+}