github.com/rawahars/moby@v24.0.4+incompatible/cmd/dockerd/docker.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "os/signal" 7 "syscall" 8 9 "github.com/docker/docker/daemon/config" 10 "github.com/docker/docker/dockerversion" 11 "github.com/docker/docker/pkg/jsonmessage" 12 "github.com/docker/docker/pkg/reexec" 13 "github.com/docker/docker/pkg/rootless" 14 "github.com/moby/buildkit/util/apicaps" 15 "github.com/moby/term" 16 "github.com/sirupsen/logrus" 17 "github.com/spf13/cobra" 18 ) 19 20 var ( 21 honorXDG bool 22 ) 23 24 func newDaemonCommand() (*cobra.Command, error) { 25 cfg, err := config.New() 26 if err != nil { 27 return nil, err 28 } 29 opts := newDaemonOptions(cfg) 30 31 cmd := &cobra.Command{ 32 Use: "dockerd [OPTIONS]", 33 Short: "A self-sufficient runtime for containers.", 34 SilenceUsage: true, 35 SilenceErrors: true, 36 Args: NoArgs, 37 RunE: func(cmd *cobra.Command, args []string) error { 38 opts.flags = cmd.Flags() 39 return runDaemon(opts) 40 }, 41 DisableFlagsInUseLine: true, 42 Version: fmt.Sprintf("%s, build %s", dockerversion.Version, dockerversion.GitCommit), 43 } 44 SetupRootCommand(cmd) 45 46 flags := cmd.Flags() 47 flags.BoolP("version", "v", false, "Print version information and quit") 48 defaultDaemonConfigFile, err := getDefaultDaemonConfigFile() 49 if err != nil { 50 return nil, err 51 } 52 flags.StringVar(&opts.configFile, "config-file", defaultDaemonConfigFile, "Daemon configuration file") 53 configureCertsDir() 54 opts.installFlags(flags) 55 if err := installConfigFlags(opts.daemonConfig, flags); err != nil { 56 return nil, err 57 } 58 installServiceFlags(flags) 59 60 return cmd, nil 61 } 62 63 func init() { 64 if dockerversion.ProductName != "" { 65 apicaps.ExportedProduct = dockerversion.ProductName 66 } 67 // When running with RootlessKit, $XDG_RUNTIME_DIR, $XDG_DATA_HOME, and $XDG_CONFIG_HOME needs to be 68 // honored as the default dirs, because we are unlikely to have permissions to access the system-wide 69 // directories. 70 // 71 // Note that even running with --rootless, when not running with RootlessKit, honorXDG needs to be kept false, 72 // because the system-wide directories in the current mount namespace are expected to be accessible. 73 // ("rootful" dockerd in rootless dockerd, #38702) 74 honorXDG = rootless.RunningWithRootlessKit() 75 } 76 77 func main() { 78 if reexec.Init() { 79 return 80 } 81 82 // Ignore SIGPIPE events. These are generated by systemd when journald is restarted while 83 // the docker daemon is not restarted and also running under systemd. 84 // Fixes https://github.com/docker/docker/issues/19728 85 signal.Ignore(syscall.SIGPIPE) 86 87 // initial log formatting; this setting is updated after the daemon configuration is loaded. 88 logrus.SetFormatter(&logrus.TextFormatter{ 89 TimestampFormat: jsonmessage.RFC3339NanoFixed, 90 FullTimestamp: true, 91 }) 92 93 // Set terminal emulation based on platform as required. 94 _, stdout, stderr := term.StdStreams() 95 96 initLogging(stdout, stderr) 97 configureGRPCLog() 98 99 onError := func(err error) { 100 fmt.Fprintf(stderr, "%s\n", err) 101 os.Exit(1) 102 } 103 104 cmd, err := newDaemonCommand() 105 if err != nil { 106 onError(err) 107 } 108 cmd.SetOut(stdout) 109 if err := cmd.Execute(); err != nil { 110 onError(err) 111 } 112 }