Browse code

Merge pull request #4189 from vbatts/vbatts-execdriver_flag

execdriver flag for docker daemon

Michael Crosby authored on 2014/02/25 13:28:17
Showing 4 changed files
... ...
@@ -25,6 +25,7 @@ type DaemonConfig struct {
25 25
 	BridgeIP                    string
26 26
 	InterContainerCommunication bool
27 27
 	GraphDriver                 string
28
+	ExecDriver                  string
28 29
 	Mtu                         int
29 30
 	DisableNetwork              bool
30 31
 }
... ...
@@ -43,6 +44,7 @@ func DaemonConfigFromJob(job *engine.Job) *DaemonConfig {
43 43
 		DefaultIp:                   net.ParseIP(job.Getenv("DefaultIp")),
44 44
 		InterContainerCommunication: job.GetenvBool("InterContainerCommunication"),
45 45
 		GraphDriver:                 job.Getenv("GraphDriver"),
46
+		ExecDriver:                  job.Getenv("ExecDriver"),
46 47
 	}
47 48
 	if dns := job.GetenvList("Dns"); dns != nil {
48 49
 		config.Dns = dns
... ...
@@ -39,6 +39,7 @@ func main() {
39 39
 		flDefaultIp          = flag.String([]string{"#ip", "-ip"}, "0.0.0.0", "Default IP address to use when binding container ports")
40 40
 		flInterContainerComm = flag.Bool([]string{"#icc", "-icc"}, true, "Enable inter-container communication")
41 41
 		flGraphDriver        = flag.String([]string{"s", "-storage-driver"}, "", "Force the docker runtime to use a specific storage driver")
42
+		flExecDriver         = flag.String([]string{"e", "-exec-driver"}, "", "Force the docker runtime to use a specific exec driver")
42 43
 		flHosts              = opts.NewListOpts(api.ValidateHost)
43 44
 		flMtu                = flag.Int([]string{"#mtu", "-mtu"}, 0, "Set the containers network MTU; if no value is provided: default to the default route MTU or 1500 if no default route is available")
44 45
 	)
... ...
@@ -100,6 +101,7 @@ func main() {
100 100
 			job.Setenv("DefaultIp", *flDefaultIp)
101 101
 			job.SetenvBool("InterContainerCommunication", *flInterContainerComm)
102 102
 			job.Setenv("GraphDriver", *flGraphDriver)
103
+			job.Setenv("ExecDriver", *flExecDriver)
103 104
 			job.SetenvInt("Mtu", *flMtu)
104 105
 			if err := job.Run(); err != nil {
105 106
 				log.Fatal(err)
... ...
@@ -79,6 +79,7 @@ Commands
79 79
       -p, --pidfile="/var/run/docker.pid": Path to use for daemon PID file
80 80
       -r, --restart=true: Restart previously running containers
81 81
       -s, --storage-driver="": Force the docker runtime to use a specific storage driver
82
+      -e, --exec-driver="": Force the docker runtime to use a specific exec driver
82 83
       -v, --version=false: Print version information and quit
83 84
       --mtu=0: Set the containers network MTU; if no value is provided: default to the default route MTU or 1500 if no default route is available
84 85
 
... ...
@@ -7,6 +7,7 @@ import (
7 7
 	"github.com/dotcloud/docker/dockerversion"
8 8
 	"github.com/dotcloud/docker/engine"
9 9
 	"github.com/dotcloud/docker/execdriver"
10
+	"github.com/dotcloud/docker/execdriver/chroot"
10 11
 	"github.com/dotcloud/docker/execdriver/lxc"
11 12
 	"github.com/dotcloud/docker/graphdriver"
12 13
 	"github.com/dotcloud/docker/graphdriver/aufs"
... ...
@@ -703,7 +704,16 @@ func NewRuntimeFromDirectory(config *DaemonConfig, eng *engine.Engine) (*Runtime
703 703
 
704 704
 	sysInfo := sysinfo.New(false)
705 705
 
706
-	ed, err := lxc.NewDriver(config.Root, sysInfo.AppArmor)
706
+	var ed execdriver.Driver
707
+	utils.Debugf("execDriver: provided %s", config.ExecDriver)
708
+	if config.ExecDriver == "chroot" && false {
709
+		// chroot is presently a noop driver https://github.com/dotcloud/docker/pull/4189#issuecomment-35330655
710
+		ed, err = chroot.NewDriver()
711
+		utils.Debugf("execDriver: using chroot")
712
+	} else {
713
+		ed, err = lxc.NewDriver(config.Root, sysInfo.AppArmor)
714
+		utils.Debugf("execDriver: using lxc")
715
+	}
707 716
 	if err != nil {
708 717
 		return nil, err
709 718
 	}