github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/cmd/dockerd/docker_windows.go (about)

     1  package main
     2  
     3  import (
     4  	"io"
     5  	"path/filepath"
     6  
     7  	"github.com/Microsoft/go-winio/pkg/etwlogrus"
     8  	_ "github.com/docker/docker/autogen/winresources/dockerd"
     9  	"github.com/sirupsen/logrus"
    10  )
    11  
    12  func runDaemon(opts *daemonOptions) error {
    13  	daemonCli := NewDaemonCli()
    14  
    15  	// On Windows, this may be launching as a service or with an option to
    16  	// register the service.
    17  	stop, runAsService, err := initService(daemonCli)
    18  	if err != nil {
    19  		logrus.Fatal(err)
    20  	}
    21  
    22  	if stop {
    23  		return nil
    24  	}
    25  
    26  	// Windows specific settings as these are not defaulted.
    27  	if opts.configFile == "" {
    28  		opts.configFile = filepath.Join(opts.daemonConfig.Root, `config\daemon.json`)
    29  	}
    30  	if runAsService {
    31  		// If Windows SCM manages the service - no need for PID files
    32  		opts.daemonConfig.Pidfile = ""
    33  	} else if opts.daemonConfig.Pidfile == "" {
    34  		opts.daemonConfig.Pidfile = filepath.Join(opts.daemonConfig.Root, "docker.pid")
    35  	}
    36  
    37  	err = daemonCli.start(opts)
    38  	notifyShutdown(err)
    39  	return err
    40  }
    41  
    42  func initLogging(stdout, _ io.Writer) {
    43  	// Maybe there is a historic reason why on non-Windows, stderr is used
    44  	// for output. However, on Windows it makes no sense and there is no need.
    45  	logrus.SetOutput(stdout)
    46  
    47  	// Provider ID: {6996f090-c5de-5082-a81e-5841acc3a635}
    48  	// Hook isn't closed explicitly, as it will exist until process exit.
    49  	// GUID is generated based on name - see Microsoft/go-winio/tools/etw-provider-gen.
    50  	if hook, err := etwlogrus.NewHook("Moby"); err == nil {
    51  		logrus.AddHook(hook)
    52  	}
    53  	return
    54  }