From 08230703fdd0f7bcd9a87a0d61d88fdf2b901e66 Mon Sep 17 00:00:00 2001 From: Alexander Morozov Date: Thu, 7 May 2015 15:35:12 -0700 Subject: [PATCH] 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 --- docker/daemon.go | 50 +++++++++++------------ integration-cli/docker_cli_daemon_test.go | 10 +++++ 2 files changed, 35 insertions(+), 25 deletions(-) diff --git a/docker/daemon.go b/docker/daemon.go index c78879784a..55cb090d67 100644 --- a/docker/daemon.go +++ b/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 diff --git a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go index de24558393..3058076bd1 100644 --- a/integration-cli/docker_cli_daemon_test.go +++ b/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) +}