瀏覽代碼

Merge pull request #16357 from Microsoft/10662-enabledockervolume

Windows: Enable docker volume
David Calavera 9 年之前
父節點
當前提交
b0b3bc56d0
共有 6 個文件被更改,包括 60 次插入38 次删除
  1. 11 0
      daemon/daemon.go
  2. 0 11
      daemon/daemon_unix.go
  3. 0 5
      daemon/daemon_windows.go
  4. 2 22
      volume/local/local.go
  5. 29 0
      volume/local/local_unix.go
  6. 18 0
      volume/local/local_windows.go

+ 11 - 0
daemon/daemon.go

@@ -47,6 +47,8 @@ import (
 	"github.com/docker/docker/registry"
 	"github.com/docker/docker/runconfig"
 	"github.com/docker/docker/trust"
+	volumedrivers "github.com/docker/docker/volume/drivers"
+	"github.com/docker/docker/volume/local"
 	"github.com/docker/libnetwork"
 	"github.com/opencontainers/runc/libcontainer/netlink"
 )
@@ -1118,3 +1120,12 @@ func (daemon *Daemon) verifyContainerSettings(hostConfig *runconfig.HostConfig,
 	// Now do platform-specific verification
 	return verifyPlatformContainerSettings(daemon, hostConfig, config)
 }
+
+func configureVolumes(config *Config) (*volumeStore, error) {
+	volumesDriver, err := local.New(config.Root)
+	if err != nil {
+		return nil, err
+	}
+	volumedrivers.Register(volumesDriver, volumesDriver.Name())
+	return newVolumeStore(volumesDriver.List()), nil
+}

+ 0 - 11
daemon/daemon_unix.go

@@ -21,8 +21,6 @@ import (
 	"github.com/docker/docker/pkg/system"
 	"github.com/docker/docker/runconfig"
 	"github.com/docker/docker/utils"
-	volumedrivers "github.com/docker/docker/volume/drivers"
-	"github.com/docker/docker/volume/local"
 	"github.com/docker/libnetwork"
 	nwapi "github.com/docker/libnetwork/api"
 	nwconfig "github.com/docker/libnetwork/config"
@@ -255,15 +253,6 @@ func migrateIfDownlevel(driver graphdriver.Driver, root string) error {
 	return migrateIfAufs(driver, root)
 }
 
-func configureVolumes(config *Config) (*volumeStore, error) {
-	volumesDriver, err := local.New(config.Root)
-	if err != nil {
-		return nil, err
-	}
-	volumedrivers.Register(volumesDriver, volumesDriver.Name())
-	return newVolumeStore(volumesDriver.List()), nil
-}
-
 func configureSysInit(config *Config) (string, error) {
 	localCopy := filepath.Join(config.Root, "init", fmt.Sprintf("dockerinit-%s", dockerversion.VERSION))
 	sysInitPath := utils.DockerInitPath(localCopy)

+ 0 - 5
daemon/daemon_windows.go

@@ -75,11 +75,6 @@ func migrateIfDownlevel(driver graphdriver.Driver, root string) error {
 	return nil
 }
 
-func configureVolumes(config *Config) (*volumeStore, error) {
-	// Windows does not support volumes at this time
-	return &volumeStore{}, nil
-}
-
 func configureSysInit(config *Config) (string, error) {
 	// TODO Windows.
 	return os.Getenv("TEMP"), nil

+ 2 - 22
volume/local/local.go

@@ -9,7 +9,6 @@ import (
 	"io/ioutil"
 	"os"
 	"path/filepath"
-	"strings"
 	"sync"
 
 	"github.com/docker/docker/volume"
@@ -23,11 +22,8 @@ const (
 	volumesPathName    = "volumes"
 )
 
-var (
-	// ErrNotFound is the typed error returned when the requested volume name can't be found
-	ErrNotFound = errors.New("volume not found")
-	oldVfsDir   = filepath.Join("vfs", "dir")
-)
+// ErrNotFound is the typed error returned when the requested volume name can't be found
+var ErrNotFound = errors.New("volume not found")
 
 // New instantiates a new Root instance with the provided scope. Scope
 // is the base path that the Root instance uses to store its
@@ -173,22 +169,6 @@ func (r *Root) Get(name string) (volume.Volume, error) {
 	return v, nil
 }
 
-// scopedPath verifies that the path where the volume is located
-// is under Docker's root and the valid local paths.
-func (r *Root) scopedPath(realPath string) bool {
-	// Volumes path for Docker version >= 1.7
-	if strings.HasPrefix(realPath, filepath.Join(r.scope, volumesPathName)) && realPath != filepath.Join(r.scope, volumesPathName) {
-		return true
-	}
-
-	// Volumes path for Docker version < 1.7
-	if strings.HasPrefix(realPath, filepath.Join(r.scope, oldVfsDir)) {
-		return true
-	}
-
-	return false
-}
-
 // localVolume implements the Volume interface from the volume package and
 // represents the volumes created by Root.
 type localVolume struct {

+ 29 - 0
volume/local/local_unix.go

@@ -0,0 +1,29 @@
+// +build linux freebsd
+
+// Package local provides the default implementation for volumes. It
+// is used to mount data volume containers and directories local to
+// the host server.
+package local
+
+import (
+	"path/filepath"
+	"strings"
+)
+
+var oldVfsDir = filepath.Join("vfs", "dir")
+
+// scopedPath verifies that the path where the volume is located
+// is under Docker's root and the valid local paths.
+func (r *Root) scopedPath(realPath string) bool {
+	// Volumes path for Docker version >= 1.7
+	if strings.HasPrefix(realPath, filepath.Join(r.scope, volumesPathName)) && realPath != filepath.Join(r.scope, volumesPathName) {
+		return true
+	}
+
+	// Volumes path for Docker version < 1.7
+	if strings.HasPrefix(realPath, filepath.Join(r.scope, oldVfsDir)) {
+		return true
+	}
+
+	return false
+}

+ 18 - 0
volume/local/local_windows.go

@@ -0,0 +1,18 @@
+// Package local provides the default implementation for volumes. It
+// is used to mount data volume containers and directories local to
+// the host server.
+package local
+
+import (
+	"path/filepath"
+	"strings"
+)
+
+// scopedPath verifies that the path where the volume is located
+// is under Docker's root and the valid local paths.
+func (r *Root) scopedPath(realPath string) bool {
+	if strings.HasPrefix(realPath, filepath.Join(r.scope, volumesPathName)) && realPath != filepath.Join(r.scope, volumesPathName) {
+		return true
+	}
+	return false
+}