From aeb89ffbbac8c5625ad4dbba66938e2ef3f5c638 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 24 Sep 2013 17:20:58 +0000 Subject: [PATCH] add a -mount-method flag --- docker/docker.go | 7 ++++--- runtime.go | 14 +++++++++++--- runtime_test.go | 4 ++-- server.go | 4 ++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/docker/docker.go b/docker/docker.go index 4dcc174d5e..1f4dcc1d86 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -36,6 +36,7 @@ func main() { flGraphPath := flag.String("g", "/var/lib/docker", "Path to graph storage base dir.") flEnableCors := flag.Bool("api-enable-cors", false, "Enable CORS requests in the remote api.") flDns := flag.String("dns", "", "Set custom dns servers") + flMountMethod := flag.String("mount-method", "", "Set the mount method to use, default is auto. [aufs, devicemapper, filesystem]") flHosts := docker.ListOpts{fmt.Sprintf("unix://%s", docker.DEFAULTUNIXSOCKET)} flag.Var(&flHosts, "H", "tcp://host:port to bind/connect to or unix://path/to/socket to use") flag.Parse() @@ -65,7 +66,7 @@ func main() { flag.Usage() return } - if err := daemon(*pidfile, *flGraphPath, flHosts, *flAutoRestart, *flEnableCors, *flDns); err != nil { + if err := daemon(*pidfile, *flGraphPath, flHosts, *flAutoRestart, *flEnableCors, *flDns, *flMountMethod); err != nil { log.Fatal(err) os.Exit(-1) } @@ -116,7 +117,7 @@ func removePidFile(pidfile string) { } } -func daemon(pidfile string, flGraphPath string, protoAddrs []string, autoRestart, enableCors bool, flDns string) error { +func daemon(pidfile string, flGraphPath string, protoAddrs []string, autoRestart, enableCors bool, flDns, mountMethod string) error { if err := createPidFile(pidfile); err != nil { log.Fatal(err) } @@ -134,7 +135,7 @@ func daemon(pidfile string, flGraphPath string, protoAddrs []string, autoRestart if flDns != "" { dns = []string{flDns} } - server, err := docker.NewServer(flGraphPath, devmapper.NewDeviceSetDM(flGraphPath), autoRestart, enableCors, dns) + server, err := docker.NewServer(flGraphPath, devmapper.NewDeviceSetDM(flGraphPath), autoRestart, enableCors, dns, mountMethod) if err != nil { return err } diff --git a/runtime.go b/runtime.go index 10e937e21a..7b2455f304 100644 --- a/runtime.go +++ b/runtime.go @@ -519,8 +519,8 @@ func (runtime *Runtime) Commit(container *Container, repository, tag, comment, a } // FIXME: harmonize with NewGraph() -func NewRuntime(flGraphPath string, deviceSet DeviceSet, autoRestart bool, dns []string) (*Runtime, error) { - runtime, err := NewRuntimeFromDirectory(flGraphPath, deviceSet, autoRestart) +func NewRuntime(flGraphPath string, deviceSet DeviceSet, autoRestart bool, dns []string, mountMethod string) (*Runtime, error) { + runtime, err := NewRuntimeFromDirectory(flGraphPath, deviceSet, autoRestart, mountMethod) if err != nil { return nil, err } @@ -538,7 +538,7 @@ func NewRuntime(flGraphPath string, deviceSet DeviceSet, autoRestart bool, dns [ return runtime, nil } -func NewRuntimeFromDirectory(root string, deviceSet DeviceSet, autoRestart bool) (*Runtime, error) { +func NewRuntimeFromDirectory(root string, deviceSet DeviceSet, autoRestart bool, mountMethod string) (*Runtime, error) { runtimeRepo := path.Join(root, "containers") if err := os.MkdirAll(runtimeRepo, 0700); err != nil && !os.IsExist(err) { @@ -578,6 +578,14 @@ func NewRuntimeFromDirectory(root string, deviceSet DeviceSet, autoRestart bool) deviceSet: deviceSet, } + if mountMethod == "aufs" { + runtime.mountMethod = MountMethodAUFS + } else if mountMethod == "devicemapper" { + runtime.mountMethod = MountMethodDeviceMapper + } else if mountMethod == "filesystem" { + runtime.mountMethod = MountMethodFilesystem + } + if err := runtime.restore(); err != nil { return nil, err } diff --git a/runtime_test.go b/runtime_test.go index bcbdf3f384..b4be93fc1e 100644 --- a/runtime_test.go +++ b/runtime_test.go @@ -135,7 +135,7 @@ func init() { } // Make it our Store root - if runtime, err := NewRuntimeFromDirectory(unitTestStoreBase, devmapper.NewDeviceSetDM(unitTestStoreDevicesBase), false); err != nil { + if runtime, err := NewRuntimeFromDirectory(unitTestStoreBase, devmapper.NewDeviceSetDM(unitTestStoreDevicesBase), false, ""); err != nil { panic(err) } else { globalRuntime = runtime @@ -504,7 +504,7 @@ func TestRestore(t *testing.T) { // Here are are simulating a docker restart - that is, reloading all containers // from scratch - runtime2, err := NewRuntimeFromDirectory(runtime1.root, runtime1.deviceSet, false) + runtime2, err := NewRuntimeFromDirectory(runtime1.root, runtime1.deviceSet, false, "") if err != nil { t.Fatal(err) } diff --git a/server.go b/server.go index f3081db81a..d468234ca2 100644 --- a/server.go +++ b/server.go @@ -1299,11 +1299,11 @@ func (srv *Server) ContainerCopy(name string, resource string, out io.Writer) er } -func NewServer(flGraphPath string, deviceSet DeviceSet, autoRestart, enableCors bool, dns ListOpts) (*Server, error) { +func NewServer(flGraphPath string, deviceSet DeviceSet, autoRestart, enableCors bool, dns ListOpts, mountMethod string) (*Server, error) { if runtime.GOARCH != "amd64" { log.Fatalf("The docker runtime currently only supports amd64 (not %s). This will change in the future. Aborting.", runtime.GOARCH) } - runtime, err := NewRuntime(flGraphPath, deviceSet, autoRestart, dns) + runtime, err := NewRuntime(flGraphPath, deviceSet, autoRestart, dns, mountMethod) if err != nil { return nil, err }