config.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package daemon
  2. import (
  3. "net"
  4. "github.com/docker/docker/daemon/networkdriver"
  5. "github.com/docker/docker/opts"
  6. flag "github.com/docker/docker/pkg/mflag"
  7. )
  8. const (
  9. defaultNetworkMtu = 1500
  10. disableNetworkBridge = "none"
  11. )
  12. // Config define the configuration of a docker daemon
  13. // These are the configuration settings that you pass
  14. // to the docker daemon when you launch it with say: `docker -d -e lxc`
  15. // FIXME: separate runtime configuration from http api configuration
  16. type Config struct {
  17. Pidfile string
  18. Root string
  19. AutoRestart bool
  20. Dns []string
  21. DnsSearch []string
  22. EnableIPv6 bool
  23. EnableIptables bool
  24. EnableIpForward bool
  25. EnableIpMasq bool
  26. DefaultIp net.IP
  27. BridgeIface string
  28. BridgeIP string
  29. FixedCIDR string
  30. FixedCIDRv6 string
  31. InterContainerCommunication bool
  32. GraphDriver string
  33. GraphOptions []string
  34. ExecDriver string
  35. Mtu int
  36. DisableNetwork bool
  37. EnableSelinuxSupport bool
  38. Context map[string][]string
  39. TrustKeyPath string
  40. Labels []string
  41. }
  42. // InstallFlags adds command-line options to the top-level flag parser for
  43. // the current process.
  44. // Subsequent calls to `flag.Parse` will populate config with values parsed
  45. // from the command-line.
  46. func (config *Config) InstallFlags() {
  47. flag.StringVar(&config.Pidfile, []string{"p", "-pidfile"}, "/var/run/docker.pid", "Path to use for daemon PID file")
  48. flag.StringVar(&config.Root, []string{"g", "-graph"}, "/var/lib/docker", "Path to use as the root of the Docker runtime")
  49. flag.BoolVar(&config.AutoRestart, []string{"#r", "#-restart"}, true, "--restart on the daemon has been deprecated in favor of --restart policies on docker run")
  50. flag.BoolVar(&config.EnableIptables, []string{"#iptables", "-iptables"}, true, "Enable Docker's addition of iptables rules")
  51. flag.BoolVar(&config.EnableIpForward, []string{"#ip-forward", "-ip-forward"}, true, "Enable net.ipv4.ip_forward and IPv6 forwarding if --fixed-cidr-v6 is defined. IPv6 forwarding may interfere with your existing IPv6 configuration when using Router Advertisement.")
  52. flag.BoolVar(&config.EnableIpMasq, []string{"-ip-masq"}, true, "Enable IP masquerading for bridge's IP range")
  53. flag.BoolVar(&config.EnableIPv6, []string{"-ipv6"}, false, "Enable IPv6 networking")
  54. flag.StringVar(&config.BridgeIP, []string{"#bip", "-bip"}, "", "Use this CIDR notation address for the network bridge's IP, not compatible with -b")
  55. flag.StringVar(&config.BridgeIface, []string{"b", "-bridge"}, "", "Attach containers to a pre-existing network bridge\nuse 'none' to disable container networking")
  56. flag.StringVar(&config.FixedCIDR, []string{"-fixed-cidr"}, "", "IPv4 subnet for fixed IPs (e.g. 10.20.0.0/16)\nthis subnet must be nested in the bridge subnet (which is defined by -b or --bip)")
  57. flag.StringVar(&config.FixedCIDRv6, []string{"-fixed-cidr-v6"}, "", "IPv6 subnet for fixed IPs (e.g.: 2001:a02b/48)")
  58. flag.BoolVar(&config.InterContainerCommunication, []string{"#icc", "-icc"}, true, "Allow unrestricted inter-container and Docker daemon host communication")
  59. flag.StringVar(&config.GraphDriver, []string{"s", "-storage-driver"}, "", "Force the Docker runtime to use a specific storage driver")
  60. flag.StringVar(&config.ExecDriver, []string{"e", "-exec-driver"}, "native", "Force the Docker runtime to use a specific exec driver")
  61. flag.BoolVar(&config.EnableSelinuxSupport, []string{"-selinux-enabled"}, false, "Enable selinux support. SELinux does not presently support the BTRFS storage driver")
  62. flag.IntVar(&config.Mtu, []string{"#mtu", "-mtu"}, 0, "Set the containers network MTU\nif no value is provided: default to the default route MTU or 1500 if no default route is available")
  63. opts.IPVar(&config.DefaultIp, []string{"#ip", "-ip"}, "0.0.0.0", "Default IP address to use when binding container ports")
  64. opts.ListVar(&config.GraphOptions, []string{"-storage-opt"}, "Set storage driver options")
  65. // FIXME: why the inconsistency between "hosts" and "sockets"?
  66. opts.IPListVar(&config.Dns, []string{"#dns", "-dns"}, "Force Docker to use specific DNS servers")
  67. opts.DnsSearchListVar(&config.DnsSearch, []string{"-dns-search"}, "Force Docker to use specific DNS search domains")
  68. opts.LabelListVar(&config.Labels, []string{"-label"}, "Set key=value labels to the daemon (displayed in `docker info`)")
  69. }
  70. func getDefaultNetworkMtu() int {
  71. if iface, err := networkdriver.GetDefaultRouteIface(); err == nil {
  72. return iface.MTU
  73. }
  74. return defaultNetworkMtu
  75. }