diff --git a/daemon/config.go b/daemon/config.go index cd555cfc88..f9931a3a78 100644 --- a/daemon/config.go +++ b/daemon/config.go @@ -5,7 +5,6 @@ import ( "github.com/docker/docker/daemon/networkdriver/bridge" "github.com/docker/docker/opts" flag "github.com/docker/docker/pkg/mflag" - "github.com/docker/docker/pkg/ulimit" "github.com/docker/docker/runconfig" ) @@ -14,42 +13,34 @@ const ( disableNetworkBridge = "none" ) -// Config define the configuration of a docker daemon -// These are the configuration settings that you pass -// to the docker daemon when you launch it with say: `docker -d -e lxc` -// FIXME: separate runtime configuration from http api configuration -type Config struct { - Bridge bridge.Config - - Pidfile string - Root string - AutoRestart bool - Dns []string - DnsSearch []string - GraphDriver string - GraphOptions []string - ExecDriver string - ExecOptions []string - Mtu int - SocketGroup string - EnableCors bool - CorsHeaders string - DisableNetwork bool - EnableSelinuxSupport bool - Context map[string][]string - TrustKeyPath string - Labels []string - Ulimits map[string]*ulimit.Ulimit - LogConfig runconfig.LogConfig +// CommonConfig defines the configuration of a docker daemon which are +// common across platforms. +type CommonConfig struct { + AutoRestart bool + Bridge bridge.Config + Context map[string][]string + CorsHeaders string + DisableNetwork bool + Dns []string + DnsSearch []string + EnableCors bool + ExecDriver string + GraphDriver string + Labels []string + LogConfig runconfig.LogConfig + Mtu int + Pidfile string + Root string + TrustKeyPath string } -// InstallFlags adds command-line options to the top-level flag parser for +// InstallCommonFlags adds command-line options to the top-level flag parser for // the current process. // Subsequent calls to `flag.Parse` will populate config with values parsed // from the command-line. -func (config *Config) InstallFlags() { - flag.StringVar(&config.Pidfile, []string{"p", "-pidfile"}, "/var/run/docker.pid", "Path to use for daemon PID file") - flag.StringVar(&config.Root, []string{"g", "-graph"}, "/var/lib/docker", "Root of the Docker runtime") +func (config *Config) InstallCommonFlags() { + flag.StringVar(&config.Pidfile, []string{"p", "-pidfile"}, defaultPidFile, "Path to use for daemon PID file") + flag.StringVar(&config.Root, []string{"g", "-graph"}, defaultGraph, "Root of the Docker runtime") flag.BoolVar(&config.AutoRestart, []string{"#r", "#-restart"}, true, "--restart on the daemon has been deprecated in favor of --restart policies on docker run") flag.BoolVar(&config.Bridge.EnableIptables, []string{"#iptables", "-iptables"}, true, "Enable addition of iptables rules") flag.BoolVar(&config.Bridge.EnableIpForward, []string{"#ip-forward", "-ip-forward"}, true, "Enable net.ipv4.ip_forward") @@ -64,23 +55,18 @@ func (config *Config) InstallFlags() { flag.BoolVar(&config.Bridge.InterContainerCommunication, []string{"#icc", "-icc"}, true, "Enable inter-container communication") flag.StringVar(&config.GraphDriver, []string{"s", "-storage-driver"}, "", "Storage driver to use") flag.StringVar(&config.ExecDriver, []string{"e", "-exec-driver"}, "native", "Exec driver to use") - flag.BoolVar(&config.EnableSelinuxSupport, []string{"-selinux-enabled"}, false, "Enable selinux support") flag.IntVar(&config.Mtu, []string{"#mtu", "-mtu"}, 0, "Set the containers network MTU") - flag.StringVar(&config.SocketGroup, []string{"G", "-group"}, "docker", "Group for the unix socket") flag.BoolVar(&config.EnableCors, []string{"#api-enable-cors", "#-api-enable-cors"}, false, "Enable CORS headers in the remote API, this is deprecated by --api-cors-header") flag.StringVar(&config.CorsHeaders, []string{"-api-cors-header"}, "", "Set CORS headers in the remote API") opts.IPVar(&config.Bridge.DefaultIp, []string{"#ip", "-ip"}, "0.0.0.0", "Default IP when binding container ports") - opts.ListVar(&config.GraphOptions, []string{"-storage-opt"}, "Set storage driver options") - opts.ListVar(&config.ExecOptions, []string{"-exec-opt"}, "Set exec driver options") // FIXME: why the inconsistency between "hosts" and "sockets"? opts.IPListVar(&config.Dns, []string{"#dns", "-dns"}, "DNS server to use") opts.DnsSearchListVar(&config.DnsSearch, []string{"-dns-search"}, "DNS search domains to use") opts.LabelListVar(&config.Labels, []string{"-label"}, "Set key=value labels to the daemon") - config.Ulimits = make(map[string]*ulimit.Ulimit) - opts.UlimitMapVar(config.Ulimits, []string{"-default-ulimit"}, "Set default ulimits for containers") flag.StringVar(&config.LogConfig.Type, []string{"-log-driver"}, "json-file", "Default driver for container logs") - flag.BoolVar(&config.Bridge.EnableUserlandProxy, []string{"-userland-proxy"}, true, "Use userland proxy for loopback traffic") opts.LogOptsVar(config.LogConfig.Config, []string{"-log-opt"}, "Set log driver options") + flag.BoolVar(&config.Bridge.EnableUserlandProxy, []string{"-userland-proxy"}, true, "Use userland proxy for loopback traffic") + } func getDefaultNetworkMtu() int { diff --git a/daemon/config_linux.go b/daemon/config_linux.go new file mode 100644 index 0000000000..8f2d6f1d2f --- /dev/null +++ b/daemon/config_linux.go @@ -0,0 +1,43 @@ +package daemon + +import ( + "github.com/docker/docker/opts" + flag "github.com/docker/docker/pkg/mflag" + "github.com/docker/docker/pkg/ulimit" +) + +var ( + defaultPidFile = "/var/run/docker.pid" + defaultGraph = "/var/lib/docker" +) + +// Config defines the configuration of a docker daemon. +// These are the configuration settings that you pass +// to the docker daemon when you launch it with say: `docker -d -e lxc` +type Config struct { + CommonConfig + + // Fields below here are platform specific. + EnableSelinuxSupport bool + ExecOptions []string + GraphOptions []string + SocketGroup string + Ulimits map[string]*ulimit.Ulimit +} + +// InstallFlags adds command-line options to the top-level flag parser for +// the current process. +// Subsequent calls to `flag.Parse` will populate config with values parsed +// from the command-line. +func (config *Config) InstallFlags() { + // First handle install flags which are consistent cross-platform + config.InstallCommonFlags() + + // Then platform-specific install flags + opts.ListVar(&config.GraphOptions, []string{"-storage-opt"}, "Set storage driver options") + opts.ListVar(&config.ExecOptions, []string{"-exec-opt"}, "Set exec driver options") + flag.BoolVar(&config.EnableSelinuxSupport, []string{"-selinux-enabled"}, false, "Enable selinux support") + flag.StringVar(&config.SocketGroup, []string{"G", "-group"}, "docker", "Group for the unix socket") + config.Ulimits = make(map[string]*ulimit.Ulimit) + opts.UlimitMapVar(config.Ulimits, []string{"-default-ulimit"}, "Set default ulimits for containers") +} diff --git a/daemon/config_windows.go b/daemon/config_windows.go new file mode 100644 index 0000000000..7c3ba12c27 --- /dev/null +++ b/daemon/config_windows.go @@ -0,0 +1,34 @@ +package daemon + +import ( + "os" + + flag "github.com/docker/docker/pkg/mflag" +) + +var ( + defaultPidFile = os.Getenv("programdata") + string(os.PathSeparator) + "docker.pid" + defaultGraph = os.Getenv("programdata") + string(os.PathSeparator) + "docker" +) + +// Config defines the configuration of a docker daemon. +// These are the configuration settings that you pass +// to the docker daemon when you launch it with say: `docker -d -e windows` +type Config struct { + CommonConfig + + // Fields below here are platform specific. (There are none presently + // for the Windows daemon.) +} + +// InstallFlags adds command-line options to the top-level flag parser for +// the current process. +// Subsequent calls to `flag.Parse` will populate config with values parsed +// from the command-line. +func (config *Config) InstallFlags() { + // First handle install flags which are consistent cross-platform + config.InstallCommonFlags() + + // Then platform-specific install flags. There are none presently on Windows + +}