|
|
@@ -863,7 +863,7 @@ func buildContainerConfigMounts(p types.Project, s types.ServiceConfig) ([]mount
|
|
|
target := config.Target
|
|
|
if config.Target == "" {
|
|
|
target = configsBaseDir + config.Source
|
|
|
- } else if !isUnixAbs(config.Target) {
|
|
|
+ } else if !isAbsTarget(config.Target) {
|
|
|
target = configsBaseDir + config.Target
|
|
|
}
|
|
|
|
|
|
@@ -898,7 +898,7 @@ func buildContainerSecretMounts(p types.Project, s types.ServiceConfig) ([]mount
|
|
|
target := secret.Target
|
|
|
if secret.Target == "" {
|
|
|
target = secretsDir + secret.Source
|
|
|
- } else if !isUnixAbs(secret.Target) {
|
|
|
+ } else if !isAbsTarget(secret.Target) {
|
|
|
target = secretsDir + secret.Target
|
|
|
}
|
|
|
|
|
|
@@ -929,10 +929,24 @@ func buildContainerSecretMounts(p types.Project, s types.ServiceConfig) ([]mount
|
|
|
return values, nil
|
|
|
}
|
|
|
|
|
|
+func isAbsTarget(p string) bool {
|
|
|
+ return isUnixAbs(p) || isWindowsAbs(p)
|
|
|
+}
|
|
|
+
|
|
|
func isUnixAbs(p string) bool {
|
|
|
return strings.HasPrefix(p, "/")
|
|
|
}
|
|
|
|
|
|
+func isWindowsAbs(p string) bool {
|
|
|
+ if strings.HasPrefix(p, "\\\\") {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ if len(p) > 2 && p[1] == ':' {
|
|
|
+ return p[2] == '\\'
|
|
|
+ }
|
|
|
+ return false
|
|
|
+}
|
|
|
+
|
|
|
func buildMount(project types.Project, volume types.ServiceVolumeConfig) (mount.Mount, error) {
|
|
|
source := volume.Source
|
|
|
// on windows, filepath.IsAbs(source) is false for unix style abs path like /var/run/docker.sock.
|