summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorAkihiro Suda <suda.akihiro@lab.ntt.co.jp>2019-04-08 18:44:14 +0900
committerAkihiro Suda <suda.akihiro@lab.ntt.co.jp>2019-04-08 18:44:14 +0900
commit3bc02fc04005ff06730f178d5b8371f5d05ada0f (patch)
tree8a521719b93eb832796a61d5cb07b0eda63e07ad /cmd
parent32923464b800ce5621849f789f594e5f53c55a36 (diff)
downloaddocker-3bc02fc04005ff06730f178d5b8371f5d05ada0f.tar.gz
fix containerd WaitTimeout
`defer r.WaitTimeout(10s)` was in a wrong place and had caused the daemon to hang for 10 seconds. Fix #39025 Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/dockerd/daemon.go6
-rw-r--r--cmd/dockerd/daemon_unix.go13
-rw-r--r--cmd/dockerd/daemon_windows.go5
3 files changed, 15 insertions, 9 deletions
diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go
index 9a795046b6..b1fad91deb 100644
--- a/cmd/dockerd/daemon.go
+++ b/cmd/dockerd/daemon.go
@@ -164,7 +164,11 @@ func (cli *DaemonCli) start(opts *daemonOptions) (err error) {
}
ctx, cancel := context.WithCancel(context.Background())
- if err := cli.initContainerD(ctx); err != nil {
+ waitForContainerDShutdown, err := cli.initContainerD(ctx)
+ if waitForContainerDShutdown != nil {
+ defer waitForContainerDShutdown(10 * time.Second)
+ }
+ if err != nil {
cancel()
return err
}
diff --git a/cmd/dockerd/daemon_unix.go b/cmd/dockerd/daemon_unix.go
index d224d0e2bd..2876c057ad 100644
--- a/cmd/dockerd/daemon_unix.go
+++ b/cmd/dockerd/daemon_unix.go
@@ -145,30 +145,31 @@ func newCgroupParent(config *config.Config) string {
return cgroupParent
}
-func (cli *DaemonCli) initContainerD(ctx context.Context) error {
+func (cli *DaemonCli) initContainerD(ctx context.Context) (func(time.Duration) error, error) {
+ var waitForShutdown func(time.Duration) error
if cli.Config.ContainerdAddr == "" {
systemContainerdAddr, ok, err := systemContainerdRunning(cli.Config.IsRootless())
if err != nil {
- return errors.Wrap(err, "could not determine whether the system containerd is running")
+ return nil, errors.Wrap(err, "could not determine whether the system containerd is running")
}
if !ok {
opts, err := cli.getContainerdDaemonOpts()
if err != nil {
- return errors.Wrap(err, "failed to generate containerd options")
+ return nil, errors.Wrap(err, "failed to generate containerd options")
}
r, err := supervisor.Start(ctx, filepath.Join(cli.Config.Root, "containerd"), filepath.Join(cli.Config.ExecRoot, "containerd"), opts...)
if err != nil {
- return errors.Wrap(err, "failed to start containerd")
+ return nil, errors.Wrap(err, "failed to start containerd")
}
cli.Config.ContainerdAddr = r.Address()
// Try to wait for containerd to shutdown
- defer r.WaitTimeout(10 * time.Second)
+ waitForShutdown = r.WaitTimeout
} else {
cli.Config.ContainerdAddr = systemContainerdAddr
}
}
- return nil
+ return waitForShutdown, nil
}
diff --git a/cmd/dockerd/daemon_windows.go b/cmd/dockerd/daemon_windows.go
index c6dd7408b1..bf7b9efa3f 100644
--- a/cmd/dockerd/daemon_windows.go
+++ b/cmd/dockerd/daemon_windows.go
@@ -5,6 +5,7 @@ import (
"fmt"
"net"
"os"
+ "time"
"github.com/docker/docker/daemon/config"
"github.com/docker/docker/libcontainerd/supervisor"
@@ -88,7 +89,7 @@ func newCgroupParent(config *config.Config) string {
return ""
}
-func (cli *DaemonCli) initContainerD(_ context.Context) error {
+func (cli *DaemonCli) initContainerD(_ context.Context) (func(time.Duration) error, error) {
system.InitContainerdRuntime(cli.Config.Experimental, cli.Config.ContainerdAddr)
- return nil
+ return nil, nil
}