Merge pull request #26340 from Microsoft/jjh/blocksinglefilevolume

Windows: Error if mapping single file volume
Upstream-commit: a123ef1bfa8d52a599ab4e178e0505b54a423126
Component: engine
This commit is contained in:
Brian Goff
2016-09-06 21:06:15 -04:00
committed by GitHub
2 changed files with 19 additions and 0 deletions
+1
View File
@@ -77,6 +77,7 @@ func TestParseMountSpec(t *testing.T) {
`lpt7:d:`: `cannot be a reserved word for Windows filenames`,
`lpt8:d:`: `cannot be a reserved word for Windows filenames`,
`lpt9:d:`: `cannot be a reserved word for Windows filenames`,
`c:\windows\system32\ntdll.dll`: `Only directories can be mapped on this platform`,
}
} else {
@@ -177,6 +177,24 @@ func ParseMountSpec(spec string, volumeDriver string) (*MountPoint, error) {
}
}
// Fix #26329. If the destination appears to be a file, and the source is null,
// it may be because we've fallen through the possible naming regex and hit a
// situation where the user intention was to map a file into a container through
// a local volume, but this is not supported by the platform.
if len(mp.Source) == 0 && len(mp.Destination) > 0 {
var fi os.FileInfo
var err error
if fi, err = os.Stat(mp.Destination); err == nil {
validName, err := IsVolumeNameValid(mp.Destination)
if err != nil {
return nil, err
}
if !validName && !fi.IsDir() {
return nil, fmt.Errorf("file '%s' cannot be mapped. Only directories can be mapped on this platform", mp.Destination)
}
}
}
logrus.Debugf("MP: Source '%s', Dest '%s', RW %t, Name '%s', Driver '%s'", mp.Source, mp.Destination, mp.RW, mp.Name, mp.Driver)
return mp, nil
}