config.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "runtime"
  4. "github.com/docker/docker/daemon/config"
  5. "github.com/docker/docker/opts"
  6. "github.com/docker/docker/registry"
  7. "github.com/spf13/pflag"
  8. )
  9. const (
  10. // defaultShutdownTimeout is the default shutdown timeout for the daemon
  11. defaultShutdownTimeout = 15
  12. // defaultTrustKeyFile is the default filename for the trust key
  13. defaultTrustKeyFile = "key.json"
  14. )
  15. // installCommonConfigFlags adds flags to the pflag.FlagSet to configure the daemon
  16. func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {
  17. var maxConcurrentDownloads, maxConcurrentUploads int
  18. defaultPidFile, err := getDefaultPidFile()
  19. if err != nil {
  20. return err
  21. }
  22. defaultDataRoot, err := getDefaultDataRoot()
  23. if err != nil {
  24. return err
  25. }
  26. defaultExecRoot, err := getDefaultExecRoot()
  27. if err != nil {
  28. return err
  29. }
  30. installRegistryServiceFlags(&conf.ServiceOptions, flags)
  31. flags.Var(opts.NewNamedListOptsRef("storage-opts", &conf.GraphOptions, nil), "storage-opt", "Storage driver options")
  32. flags.Var(opts.NewNamedListOptsRef("authorization-plugins", &conf.AuthorizationPlugins, nil), "authorization-plugin", "Authorization plugins to load")
  33. flags.Var(opts.NewNamedListOptsRef("exec-opts", &conf.ExecOptions, nil), "exec-opt", "Runtime execution options")
  34. flags.StringVarP(&conf.Pidfile, "pidfile", "p", defaultPidFile, "Path to use for daemon PID file")
  35. flags.StringVarP(&conf.Root, "graph", "g", defaultDataRoot, "Root of the Docker runtime")
  36. flags.StringVar(&conf.ExecRoot, "exec-root", defaultExecRoot, "Root directory for execution state files")
  37. flags.StringVar(&conf.ContainerdAddr, "containerd", "", "containerd grpc address")
  38. flags.BoolVar(&conf.CriContainerd, "cri-containerd", false, "start containerd with cri")
  39. // "--graph" is "soft-deprecated" in favor of "data-root". This flag was added
  40. // before Docker 1.0, so won't be removed, only hidden, to discourage its usage.
  41. flags.MarkHidden("graph")
  42. flags.StringVar(&conf.Root, "data-root", defaultDataRoot, "Root directory of persistent Docker state")
  43. flags.BoolVarP(&conf.AutoRestart, "restart", "r", true, "--restart on the daemon has been deprecated in favor of --restart policies on docker run")
  44. flags.MarkDeprecated("restart", "Please use a restart policy on docker run")
  45. // Windows doesn't support setting the storage driver - there is no choice as to which ones to use.
  46. if runtime.GOOS != "windows" {
  47. flags.StringVarP(&conf.GraphDriver, "storage-driver", "s", "", "Storage driver to use")
  48. }
  49. flags.IntVar(&conf.Mtu, "mtu", 0, "Set the containers network MTU")
  50. flags.BoolVar(&conf.RawLogs, "raw-logs", false, "Full timestamps without ANSI coloring")
  51. flags.Var(opts.NewListOptsRef(&conf.DNS, opts.ValidateIPAddress), "dns", "DNS server to use")
  52. flags.Var(opts.NewNamedListOptsRef("dns-opts", &conf.DNSOptions, nil), "dns-opt", "DNS options to use")
  53. flags.Var(opts.NewListOptsRef(&conf.DNSSearch, opts.ValidateDNSSearch), "dns-search", "DNS search domains to use")
  54. flags.Var(opts.NewNamedListOptsRef("labels", &conf.Labels, opts.ValidateLabel), "label", "Set key=value labels to the daemon")
  55. flags.StringVar(&conf.LogConfig.Type, "log-driver", "json-file", "Default driver for container logs")
  56. flags.Var(opts.NewNamedMapOpts("log-opts", conf.LogConfig.Config, nil), "log-opt", "Default log driver options for containers")
  57. flags.StringVar(&conf.ClusterAdvertise, "cluster-advertise", "", "Address or interface name to advertise")
  58. flags.StringVar(&conf.ClusterStore, "cluster-store", "", "URL of the distributed storage backend")
  59. flags.Var(opts.NewNamedMapOpts("cluster-store-opts", conf.ClusterOpts, nil), "cluster-store-opt", "Set cluster store options")
  60. flags.StringVar(&conf.CorsHeaders, "api-cors-header", "", "Set CORS headers in the Engine API")
  61. flags.IntVar(&maxConcurrentDownloads, "max-concurrent-downloads", config.DefaultMaxConcurrentDownloads, "Set the max concurrent downloads for each pull")
  62. flags.IntVar(&maxConcurrentUploads, "max-concurrent-uploads", config.DefaultMaxConcurrentUploads, "Set the max concurrent uploads for each push")
  63. flags.IntVar(&conf.ShutdownTimeout, "shutdown-timeout", defaultShutdownTimeout, "Set the default shutdown timeout")
  64. flags.IntVar(&conf.NetworkDiagnosticPort, "network-diagnostic-port", 0, "TCP port number of the network diagnostic server")
  65. flags.MarkHidden("network-diagnostic-port")
  66. flags.StringVar(&conf.SwarmDefaultAdvertiseAddr, "swarm-default-advertise-addr", "", "Set default address or interface for swarm advertised address")
  67. flags.BoolVar(&conf.Experimental, "experimental", false, "Enable experimental features")
  68. flags.StringVar(&conf.MetricsAddress, "metrics-addr", "", "Set default address and port to serve the metrics api on")
  69. flags.Var(opts.NewNamedListOptsRef("node-generic-resources", &conf.NodeGenericResources, opts.ValidateSingleGenericResource), "node-generic-resource", "Advertise user-defined resource")
  70. flags.IntVar(&conf.NetworkControlPlaneMTU, "network-control-plane-mtu", config.DefaultNetworkMtu, "Network Control plane MTU")
  71. conf.MaxConcurrentDownloads = &maxConcurrentDownloads
  72. conf.MaxConcurrentUploads = &maxConcurrentUploads
  73. return nil
  74. }
  75. func installRegistryServiceFlags(options *registry.ServiceOptions, flags *pflag.FlagSet) {
  76. ana := opts.NewNamedListOptsRef("allow-nondistributable-artifacts", &options.AllowNondistributableArtifacts, registry.ValidateIndexName)
  77. mirrors := opts.NewNamedListOptsRef("registry-mirrors", &options.Mirrors, registry.ValidateMirror)
  78. insecureRegistries := opts.NewNamedListOptsRef("insecure-registries", &options.InsecureRegistries, registry.ValidateIndexName)
  79. flags.Var(ana, "allow-nondistributable-artifacts", "Allow push of nondistributable artifacts to registry")
  80. flags.Var(mirrors, "registry-mirror", "Preferred Docker registry mirror")
  81. flags.Var(insecureRegistries, "insecure-registry", "Enable insecure registry communication")
  82. }