Parcourir la source

Fix api servers creation and daemon start order

* daemon creation wasn't parallel to request buffering
* it was possible that empty volume will be created in
  /var/run/docker.sock by some container

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Alexander Morozov il y a 10 ans
Parent
commit
08230703fd
2 fichiers modifiés avec 35 ajouts et 25 suppressions
  1. 25 25
      docker/daemon.go
  2. 10 0
      integration-cli/docker_cli_daemon_test.go

+ 25 - 25
docker/daemon.go

@@ -98,31 +98,6 @@ func mainDaemon() {
 		}()
 	}
 
-	if err := migrateKey(); err != nil {
-		logrus.Fatal(err)
-	}
-	daemonCfg.TrustKeyPath = *flTrustKey
-
-	registryService := registry.NewService(registryCfg)
-	d, err := daemon.NewDaemon(daemonCfg, registryService)
-	if err != nil {
-		if pfile != nil {
-			if err := pfile.Remove(); err != nil {
-				logrus.Error(err)
-			}
-		}
-		logrus.Fatalf("Error starting daemon: %v", err)
-	}
-
-	logrus.Info("Daemon has completed initialization")
-
-	logrus.WithFields(logrus.Fields{
-		"version":     dockerversion.VERSION,
-		"commit":      dockerversion.GITCOMMIT,
-		"execdriver":  d.ExecutionDriver().Name(),
-		"graphdriver": d.GraphDriver().String(),
-	}).Info("Docker daemon")
-
 	serverConfig := &apiserver.ServerConfig{
 		Logging:     true,
 		EnableCors:  daemonCfg.EnableCors,
@@ -151,6 +126,31 @@ func mainDaemon() {
 		serveAPIWait <- nil
 	}()
 
+	if err := migrateKey(); err != nil {
+		logrus.Fatal(err)
+	}
+	daemonCfg.TrustKeyPath = *flTrustKey
+
+	registryService := registry.NewService(registryCfg)
+	d, err := daemon.NewDaemon(daemonCfg, registryService)
+	if err != nil {
+		if pfile != nil {
+			if err := pfile.Remove(); err != nil {
+				logrus.Error(err)
+			}
+		}
+		logrus.Fatalf("Error starting daemon: %v", err)
+	}
+
+	logrus.Info("Daemon has completed initialization")
+
+	logrus.WithFields(logrus.Fields{
+		"version":     dockerversion.VERSION,
+		"commit":      dockerversion.GITCOMMIT,
+		"execdriver":  d.ExecutionDriver().Name(),
+		"graphdriver": d.GraphDriver().String(),
+	}).Info("Docker daemon")
+
 	signal.Trap(func() {
 		api.Close()
 		<-serveAPIWait

+ 10 - 0
integration-cli/docker_cli_daemon_test.go

@@ -1160,3 +1160,13 @@ func pingContainers(c *check.C, d *Daemon, expectFailure bool) {
 	args = append(dargs, "rm", "-f", "container1")
 	runCommand(exec.Command(dockerBinary, args...))
 }
+
+func (s *DockerDaemonSuite) TestDaemonRestartWithSockerAsVolume(c *check.C) {
+	c.Assert(s.d.StartWithBusybox(), check.IsNil)
+
+	socket := filepath.Join(s.d.folder, "docker.sock")
+
+	out, err := s.d.Cmd("run", "-d", "-v", socket+":/sock", "busybox")
+	c.Assert(err, check.IsNil, check.Commentf("Output: %s", out))
+	c.Assert(s.d.Restart(), check.IsNil)
+}