From 4e080347af657ca3a0c103c6bc6cd6a8157d20d8 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Sat, 16 Apr 2016 17:21:17 +0200 Subject: [PATCH] Enable auto-creation of host-path on Windows Auto-creation of host-paths has been un-deprecated, so to have feature-parity between Linux and Windows, this feature should also be present on Windows. This enables auto-creation on Windows. Signed-off-by: Sebastiaan van Stijn --- volume/volume.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/volume/volume.go b/volume/volume.go index f288ce97da..daa6a8cbd3 100644 --- a/volume/volume.go +++ b/volume/volume.go @@ -3,10 +3,10 @@ package volume import ( "fmt" "os" - "runtime" "strings" "github.com/docker/docker/pkg/stringid" + "github.com/docker/docker/pkg/system" ) // DefaultDriverName is the driver name used for the driver @@ -80,20 +80,20 @@ func (m *MountPoint) Setup() (string, error) { } return m.Volume.Mount(m.ID) } - if len(m.Source) > 0 { - if _, err := os.Stat(m.Source); err != nil { - if !os.IsNotExist(err) { - return "", err - } - if runtime.GOOS != "windows" { // Windows does not have deprecation issues here - if err := os.MkdirAll(m.Source, 0755); err != nil { - return "", err - } - } - } - return m.Source, nil + if len(m.Source) == 0 { + return "", fmt.Errorf("Unable to setup mount point, neither source nor volume defined") } - return "", fmt.Errorf("Unable to setup mount point, neither source nor volume defined") + // system.MkdirAll() produces an error if m.Source exists and is a file (not a directory), + // so first check if the path does not exist + if _, err := os.Stat(m.Source); err != nil { + if !os.IsNotExist(err) { + return "", err + } + if err := system.MkdirAll(m.Source, 0755); err != nil { + return "", err + } + } + return m.Source, nil } // Path returns the path of a volume in a mount point.