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 */