diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2022-04-26 08:38:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-26 08:38:33 -0400 |
commit | ace6672bf1a9b011a3c414783496668b5f27f3eb (patch) | |
tree | 90dc8797ae609979958867f6ac2ede95e2d46e4f /pkg/specgen/volumes.go | |
parent | b3416d3292691788097389b8f41a632c56a926fa (diff) | |
parent | b0d36f63513ee64fa1c1eff4d1045a7633804f12 (diff) | |
download | podman-ace6672bf1a9b011a3c414783496668b5f27f3eb.tar.gz podman-ace6672bf1a9b011a3c414783496668b5f27f3eb.tar.bz2 podman-ace6672bf1a9b011a3c414783496668b5f27f3eb.zip |
Merge pull request #13908 from n1hility/win-mounts
Implement Windows volume/mount support
Diffstat (limited to 'pkg/specgen/volumes.go')
-rw-r--r-- | pkg/specgen/volumes.go | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/pkg/specgen/volumes.go b/pkg/specgen/volumes.go index eca8c0c35..b26666df3 100644 --- a/pkg/specgen/volumes.go +++ b/pkg/specgen/volumes.go @@ -65,7 +65,7 @@ func GenVolumeMounts(volumeFlag []string) (map[string]spec.Mount, map[string]*Na err error ) - splitVol := strings.Split(vol, ":") + splitVol := SplitVolumeString(vol) if len(splitVol) > 3 { return nil, nil, nil, errors.Wrapf(volumeFormatErr, vol) } @@ -93,7 +93,7 @@ func GenVolumeMounts(volumeFlag []string) (map[string]spec.Mount, map[string]*Na } } - if strings.HasPrefix(src, "/") || strings.HasPrefix(src, ".") { + if strings.HasPrefix(src, "/") || strings.HasPrefix(src, ".") || isHostWinPath(src) { // This is not a named volume overlayFlag := false chownFlag := false @@ -152,3 +152,26 @@ func GenVolumeMounts(volumeFlag []string) (map[string]spec.Mount, map[string]*Na return mounts, volumes, overlayVolumes, nil } + +// Splits a volume string, accounting for Win drive paths +// when running as a WSL linux guest or Windows client +func SplitVolumeString(vol string) []string { + parts := strings.Split(vol, ":") + if !shouldResolveWinPaths() { + return parts + } + + // Skip extended marker prefix if present + n := 0 + if strings.HasPrefix(vol, `\\?\`) { + n = 4 + } + + if hasWinDriveScheme(vol, n) { + first := parts[0] + ":" + parts[1] + parts = parts[1:] + parts[0] = first + } + + return parts +} |