Browse Source

Merge pull request #4884 from rhatdan/remount-var-lib-docker

Remount /var/lib/docker as --private to fix scaling issue
Victor Vieux 11 years ago
parent
commit
c705e4a80b
1 changed files with 21 additions and 0 deletions
  1. 21 0
      runtime/runtime.go

+ 21 - 0
runtime/runtime.go

@@ -10,6 +10,7 @@ import (
 	"github.com/dotcloud/docker/graph"
 	"github.com/dotcloud/docker/image"
 	"github.com/dotcloud/docker/pkg/graphdb"
+	"github.com/dotcloud/docker/pkg/mount"
 	"github.com/dotcloud/docker/pkg/sysinfo"
 	"github.com/dotcloud/docker/runconfig"
 	"github.com/dotcloud/docker/runtime/execdriver"
@@ -59,6 +60,22 @@ type Runtime struct {
 	execDriver     execdriver.Driver
 }
 
+// Mountpoints should be private to the container
+func remountPrivate(mountPoint string) error {
+
+	mounted, err := mount.Mounted(mountPoint)
+	if err != nil {
+		return err
+	}
+
+	if !mounted {
+		if err := mount.Mount(mountPoint, mountPoint, "none", "bind,rw"); err != nil {
+			return err
+		}
+	}
+	return mount.ForceMount("", mountPoint, "none", "private")
+}
+
 // List returns an array of all containers registered in the runtime.
 func (runtime *Runtime) List() []*Container {
 	containers := new(History)
@@ -654,6 +671,10 @@ func NewRuntimeFromDirectory(config *daemonconfig.Config, eng *engine.Engine) (*
 	}
 	utils.Debugf("Using graph driver %s", driver)
 
+	if err := remountPrivate(config.Root); err != nil {
+		return nil, err
+	}
+
 	runtimeRepo := path.Join(config.Root, "containers")
 
 	if err := os.MkdirAll(runtimeRepo, 0700); err != nil && !os.IsExist(err) {