From e38767e197a1456458cda53b4558f56f5b6f22fa Mon Sep 17 00:00:00 2001 From: Lei Jitang Date: Mon, 12 Oct 2015 04:49:25 -0400 Subject: [PATCH] Fix docker daemon exit immediately after starting without -H option closes #16927 Signed-off-by: Lei Jitang --- docker/daemon.go | 3 +++ integration-cli/docker_cli_daemon_test.go | 8 +++++++ integration-cli/docker_utils.go | 26 +++++++++++++++++++---- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/docker/daemon.go b/docker/daemon.go index 96c90a7156..fb68e70544 100644 --- a/docker/daemon.go +++ b/docker/daemon.go @@ -224,6 +224,9 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error { defaultHost = opts.DefaultTLSHost } + if len(commonFlags.Hosts) == 0 { + commonFlags.Hosts = make([]string, 1) + } for i := 0; i < len(commonFlags.Hosts); i++ { var err error if commonFlags.Hosts[i], err = opts.ParseHost(defaultHost, commonFlags.Hosts[i]); err != nil { diff --git a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go index b28c8404ab..451027ccce 100644 --- a/integration-cli/docker_cli_daemon_test.go +++ b/integration-cli/docker_cli_daemon_test.go @@ -1715,3 +1715,11 @@ func (s *DockerDaemonSuite) TestDaemonCorruptedFluentdAddress(c *check.C) { c.Fatalf("Expected %q message; but doesn't exist in log: %q, err: %v", expected, out, err) } } + +func (s *DockerDaemonSuite) TestDaemonStartWithoutHost(c *check.C) { + s.d.useDefaultHost = true + defer func() { + s.d.useDefaultHost = false + }() + c.Assert(s.d.Start(), check.IsNil) +} diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index 070dd86e5b..7ade4706cc 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -49,6 +49,7 @@ type Daemon struct { execDriver string wait chan error userlandProxy bool + useDefaultHost bool } // NewDaemon returns a Daemon instance to be used for testing. @@ -101,12 +102,13 @@ func (d *Daemon) Start(arg ...string) error { args := append(d.GlobalFlags, d.Command, - "--host", d.sock(), "--graph", d.root, "--pidfile", fmt.Sprintf("%s/docker.pid", d.folder), fmt.Sprintf("--userland-proxy=%t", d.userlandProxy), ) - + if !d.useDefaultHost { + args = append(args, []string{"--host", d.sock()}...) + } if root := os.Getenv("DOCKER_REMAP_ROOT"); root != "" { args = append(args, []string{"--userns-remap", root}...) } @@ -168,7 +170,15 @@ func (d *Daemon) Start(arg ...string) error { case <-time.After(2 * time.Second): return fmt.Errorf("[%s] timeout: daemon does not respond", d.id) case <-tick: - c, err := net.Dial("unix", filepath.Join(d.folder, "docker.sock")) + var ( + c net.Conn + err error + ) + if d.useDefaultHost { + c, err = net.Dial("unix", "/var/run/docker.sock") + } else { + c, err = net.Dial("unix", filepath.Join(d.folder, "docker.sock")) + } if err != nil { continue } @@ -291,7 +301,15 @@ func (d *Daemon) Restart(arg ...string) error { func (d *Daemon) queryRootDir() (string, error) { // update daemon root by asking /info endpoint (to support user // namespaced daemon with root remapped uid.gid directory) - conn, err := net.Dial("unix", filepath.Join(d.folder, "docker.sock")) + var ( + conn net.Conn + err error + ) + if d.useDefaultHost { + conn, err = net.Dial("unix", "/var/run/docker.sock") + } else { + conn, err = net.Dial("unix", filepath.Join(d.folder, "docker.sock")) + } if err != nil { return "", err }