From 5f9634b1f6ac337db8ba8cc09e0b7866749eba5e Mon Sep 17 00:00:00 2001 From: John Howard Date: Wed, 8 Mar 2017 15:18:30 -0800 Subject: [PATCH] Windows: no pidfile when service Signed-off-by: John Howard Upstream-commit: a8e144dab4ec12eb5111df26abc87f7939faa1c3 Component: engine --- components/engine/cmd/dockerd/docker.go | 7 ++++++- .../engine/cmd/dockerd/service_unsupported.go | 4 ++-- .../engine/cmd/dockerd/service_windows.go | 21 +++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/components/engine/cmd/dockerd/docker.go b/components/engine/cmd/dockerd/docker.go index 6d1674f147..0bde86d203 100644 --- a/components/engine/cmd/dockerd/docker.go +++ b/components/engine/cmd/dockerd/docker.go @@ -74,7 +74,7 @@ func runDaemon(opts daemonOptions) error { // On Windows, this may be launching as a service or with an option to // register the service. - stop, err := initService(daemonCli) + stop, runAsService, err := initService(daemonCli) if err != nil { logrus.Fatal(err) } @@ -83,6 +83,11 @@ func runDaemon(opts daemonOptions) error { return nil } + // If Windows SCM manages the service - no need for PID files + if runAsService { + opts.daemonConfig.Pidfile = "" + } + err = daemonCli.start(opts) notifyShutdown(err) return err diff --git a/components/engine/cmd/dockerd/service_unsupported.go b/components/engine/cmd/dockerd/service_unsupported.go index 64ad7fcaa0..e67ad474b1 100644 --- a/components/engine/cmd/dockerd/service_unsupported.go +++ b/components/engine/cmd/dockerd/service_unsupported.go @@ -6,8 +6,8 @@ import ( "github.com/spf13/pflag" ) -func initService(daemonCli *DaemonCli) (bool, error) { - return false, nil +func initService(daemonCli *DaemonCli) (bool, bool, error) { + return false, false, nil } func installServiceFlags(flags *pflag.FlagSet) { diff --git a/components/engine/cmd/dockerd/service_windows.go b/components/engine/cmd/dockerd/service_windows.go index 10171b0e3e..3d038fad79 100644 --- a/components/engine/cmd/dockerd/service_windows.go +++ b/components/engine/cmd/dockerd/service_windows.go @@ -254,25 +254,28 @@ func unregisterService() error { return nil } -func initService(daemonCli *DaemonCli) (bool, error) { +// initService is the entry point for running the daemon as a Windows +// service. It returns an indication to stop (if registering/un-registering); +// an indication of whether it is running as a service; and an error. +func initService(daemonCli *DaemonCli) (bool, bool, error) { if *flUnregisterService { if *flRegisterService { - return true, errors.New("--register-service and --unregister-service cannot be used together") + return true, false, errors.New("--register-service and --unregister-service cannot be used together") } - return true, unregisterService() + return true, false, unregisterService() } if *flRegisterService { - return true, registerService() + return true, false, registerService() } if !*flRunService { - return false, nil + return false, false, nil } interactive, err := svc.IsAnInteractiveSession() if err != nil { - return false, err + return false, false, err } h := &handler{ @@ -285,7 +288,7 @@ func initService(daemonCli *DaemonCli) (bool, error) { if !interactive { log, err = eventlog.Open(*flServiceName) if err != nil { - return false, err + return false, false, err } } @@ -306,9 +309,9 @@ func initService(daemonCli *DaemonCli) (bool, error) { // Wait for the first signal from the service handler. err = <-h.fromsvc if err != nil { - return false, err + return false, false, err } - return false, nil + return false, true, nil } func (h *handler) started() error {