From cf0adcc817e422e86966a24a1dc758369f3c076f Mon Sep 17 00:00:00 2001 From: Vishnu Kannan Date: Fri, 13 Nov 2015 14:19:24 -0800 Subject: [PATCH] Add support for Overlayfs. Signed-off-by: Vishnu kannan --- container/docker/factory.go | 5 ++++- container/docker/handler.go | 30 ++++++++++++++++++++++-------- fs/fs.go | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/container/docker/factory.go b/container/docker/factory.go index 4cc22c77..69c981fa 100644 --- a/container/docker/factory.go +++ b/container/docker/factory.go @@ -88,7 +88,10 @@ func RootDir() string { type storageDriver string const ( - aufsStorageDriver storageDriver = "aufs" + // TODO: Add support for devicemapper storage usage. + devicemapperStorageDriver storageDriver = "devicemapper" + aufsStorageDriver storageDriver = "aufs" + overlayStorageDriver storageDriver = "overlay" ) type dockerFactory struct { diff --git a/container/docker/handler.go b/container/docker/handler.go index 3440a48a..13318a60 100644 --- a/container/docker/handler.go +++ b/container/docker/handler.go @@ -34,12 +34,15 @@ import ( libcontainerconfigs "github.com/opencontainers/runc/libcontainer/configs" ) -// Path to aufs dir where all the files exist. -// aufs/layers is ignored here since it does not hold a lot of data. -// aufs/mnt contains the mount points used to compose the rootfs. Hence it is also ignored. const ( - pathToAufsDir = "aufs/diff" + // Path to aufs dir where all the files exist. + // aufs/layers is ignored here since it does not hold a lot of data. + // aufs/mnt contains the mount points used to compose the rootfs. Hence it is also ignored. + pathToAufsDir = "aufs/diff" + // Path to the directory where docker stores log files if the json logging driver is enabled. pathToContainersDir = "containers" + // Path to the overlayfs storage driver directory. + pathToOverlayDir = "overlay" ) type dockerContainerHandler struct { @@ -119,6 +122,8 @@ func newDockerContainerHandler( case aufsStorageDriver: // Add writable layer for aufs. storageDirs = append(storageDirs, path.Join(*dockerRootDir, pathToAufsDir, id)) + case overlayStorageDriver: + storageDirs = append(storageDirs, path.Join(*dockerRootDir, pathToOverlayDir, id)) } handler := &dockerContainerHandler{ @@ -228,8 +233,14 @@ func (self *dockerContainerHandler) GetSpec() (info.ContainerSpec, error) { spec := libcontainerConfigToContainerSpec(libcontainerConfig, mi) spec.CreationTime = self.creationTime - // For now only enable for aufs filesystems - spec.HasFilesystem = self.storageDriver == aufsStorageDriver + + spec.HasFilesystem = false + switch self.storageDriver { + case aufsStorageDriver: + case overlayStorageDriver: + spec.HasFilesystem = true + } + spec.Labels = self.labels spec.Image = self.image spec.HasNetwork = hasNet(self.networkMode) @@ -238,8 +249,11 @@ func (self *dockerContainerHandler) GetSpec() (info.ContainerSpec, error) { } func (self *dockerContainerHandler) getFsStats(stats *info.ContainerStats) error { - // No support for non-aufs storage drivers. - if self.storageDriver != aufsStorageDriver { + switch self.storageDriver { + case aufsStorageDriver: + case overlayStorageDriver: + break + default: return nil } diff --git a/fs/fs.go b/fs/fs.go index b7913cdd..af21a6e1 100644 --- a/fs/fs.go +++ b/fs/fs.go @@ -128,7 +128,7 @@ func getDockerImagePaths(context Context) []string { // TODO(rjnagal): Detect docker root and graphdriver directories from docker info. dockerRoot := context.DockerRoot dockerImagePaths := []string{} - for _, dir := range []string{"devicemapper", "btrfs", "aufs"} { + for _, dir := range []string{"devicemapper", "btrfs", "aufs", "overlay"} { dockerImagePaths = append(dockerImagePaths, path.Join(dockerRoot, dir)) } for dockerRoot != "/" && dockerRoot != "." {