d5b271c155
Description: When using local volume option such as size=10G, type=tmpfs, if we provide wrong options, we could create volume successfully. But when we are ready to use it, it will fail to start container by failing to mount the local volume(invalid option). We should check the options at when we create it. Signed-off-by: Wentao Zhang <zhangwentao234@huawei.com> Signed-off-by: Vincent Demeester <vincent@sbr.pm> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
// 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 "github.com/docker/docker/volume/local"
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
type optsConfig struct{}
|
|
|
|
var (
|
|
validOpts map[string]bool
|
|
mandatoryOpts map[string]struct{}
|
|
)
|
|
|
|
// 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
|
|
}
|
|
|
|
func setOpts(v *localVolume, opts map[string]string) error {
|
|
if len(opts) > 0 {
|
|
return fmt.Errorf("options are not supported on this platform")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *localVolume) mount() error {
|
|
return nil
|
|
}
|
|
|
|
func (v *localVolume) CreatedAt() (time.Time, error) {
|
|
fileInfo, err := os.Stat(v.path)
|
|
if err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
ft := fileInfo.Sys().(*syscall.Win32FileAttributeData).CreationTime
|
|
return time.Unix(0, ft.Nanoseconds()), nil
|
|
}
|