mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Windows: Error if mapping single file volume
Signed-off-by: John Howard <jhoward@microsoft.com>
This commit is contained in:
parent
078964177f
commit
1b62b8c084
2 changed files with 19 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue