github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/cmd/firstContainerd/docker.go (about)

     1  package firstContainer
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"runtime"
     8  
     9  	"github.com/Sirupsen/logrus"
    10  	"github.com/docker/docker/cli"
    11  	cliflags "github.com/docker/docker/cli/flags"
    12  	"github.com/docker/docker/daemon"
    13  	"github.com/docker/docker/dockerversion"
    14  	"github.com/docker/docker/pkg/reexec"
    15  	"github.com/docker/docker/pkg/term"
    16  	"github.com/spf13/cobra"
    17  	"github.com/spf13/pflag"
    18  )
    19  
    20  type daemonOptions struct {
    21  	version      bool
    22  	configFile   string
    23  	daemonConfig *daemon.Config
    24  	common       *cliflags.CommonOptions
    25  	flags        *pflag.FlagSet
    26  }
    27  
    28  func newDaemonCommand() *cobra.Command {
    29      fmt.Println("cmd/firstContainerd/docker.go  newDaemonCommand()")
    30  	opts := daemonOptions{
    31  		daemonConfig: daemon.NewConfig(),
    32  		common:       cliflags.NewCommonOptions(),
    33  	}
    34  
    35  	cmd := &cobra.Command{
    36  		Use:           "dockerd [OPTIONS]",
    37  		Short:         "A self-sufficient runtime for containers.",
    38  		SilenceUsage:  true,
    39  		SilenceErrors: true,
    40  		Args:          cli.NoArgs,
    41  		RunE: func(cmd *cobra.Command, args []string) error {
    42  			opts.flags = cmd.Flags()
    43  			return runDaemon(opts)
    44  		},
    45  	}
    46  	cli.SetupRootCommand(cmd)
    47  
    48  	flags := cmd.Flags()
    49  	flags.BoolVarP(&opts.version, "version", "v", false, "Print version information and quit")
    50  	flags.StringVar(&opts.configFile, flagDaemonConfigFile, defaultDaemonConfigFile, "Daemon configuration file")
    51  	opts.common.InstallFlags(flags)
    52  	opts.daemonConfig.InstallFlags(flags)
    53  	installServiceFlags(flags)
    54  
    55  	return cmd
    56  }
    57  
    58  func runDaemon(opts daemonOptions) error {
    59  	if opts.version {
    60  		showVersion()
    61  		return nil
    62  	}
    63  
    64  	daemonCli := NewDaemonCli()
    65  
    66  	// Windows specific settings as these are not defaulted.
    67  	if runtime.GOOS == "windows" {
    68  		if opts.daemonConfig.Pidfile == "" {
    69  			opts.daemonConfig.Pidfile = filepath.Join(opts.daemonConfig.Root, "docker.pid")
    70  		}
    71  		if opts.configFile == "" {
    72  			opts.configFile = filepath.Join(opts.daemonConfig.Root, `config\daemon.json`)
    73  		}
    74  	}
    75  
    76  	// On Windows, this may be launching as a service or with an option to
    77  	// register the service.
    78  	stop, err := initService(daemonCli)
    79  	if err != nil {
    80  		logrus.Fatal(err)
    81  	}
    82  
    83  	if stop {
    84  		return nil
    85  	}
    86  
    87  	err = daemonCli.start(opts)
    88  	notifyShutdown(err)
    89  	return err
    90  }
    91  
    92  func showVersion() {
    93  	fmt.Printf("Docker version %s, build %s\n", dockerversion.Version, dockerversion.GitCommit)
    94  }
    95  
    96  
    97  
    98  
    99  /*
   100  func main() {
   101  	if reexec.Init() {
   102  		return
   103  	}
   104  
   105  	// Set terminal emulation based on platform as required.
   106  	_, stdout, stderr := term.StdStreams()
   107  	logrus.SetOutput(stderr)
   108  
   109  	cmd := newDaemonCommand()
   110  	cmd.SetOutput(stdout)
   111  	if err := cmd.Execute(); err != nil {
   112  		fmt.Fprintf(stderr, "%s\n", err)
   113  		os.Exit(1)
   114  	}
   115  }
   116  */