summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoropenshift-ci[bot] <75433959+openshift-ci[bot]@users.noreply.github.com>2022-07-01 12:37:10 +0000
committerGitHub <noreply@github.com>2022-07-01 12:37:10 +0000
commit21cd3b2ed270c7396157c4a85457842804d29a00 (patch)
treeea321dccb7ca3b697154e10ba4754cc445126a14
parent7688c5ac63ae33e3caa7fe00b122f95bf60abdd5 (diff)
parentd6678adc92b77db13db557a0381beff1c7da8549 (diff)
downloadpodman-21cd3b2ed270c7396157c4a85457842804d29a00.tar.gz
podman-21cd3b2ed270c7396157c4a85457842804d29a00.tar.bz2
podman-21cd3b2ed270c7396157c4a85457842804d29a00.zip
Merge pull request #14798 from flouthoc/overlay-mount-path-abs
overlay,mount: convert source to absolute path for `overlay` mounts of paths
-rw-r--r--pkg/specgen/volumes.go8
-rw-r--r--test/e2e/run_volume_test.go9
2 files changed, 16 insertions, 1 deletions
diff --git a/pkg/specgen/volumes.go b/pkg/specgen/volumes.go
index f272a5c11..5e1ea9a78 100644
--- a/pkg/specgen/volumes.go
+++ b/pkg/specgen/volumes.go
@@ -139,7 +139,13 @@ func GenVolumeMounts(volumeFlag []string) (map[string]spec.Mount, map[string]*Na
// This is a overlay volume
newOverlayVol := new(OverlayVolume)
newOverlayVol.Destination = dest
- newOverlayVol.Source = src
+ // convert src to absolute path so we don't end up passing
+ // relative values as lowerdir for overlay mounts
+ source, err := filepath.Abs(src)
+ if err != nil {
+ return nil, nil, nil, errors.Wrapf(err, "failed while resolving absolute path for source %v for overlay mount", src)
+ }
+ newOverlayVol.Source = source
newOverlayVol.Options = options
if _, ok := overlayVolumes[newOverlayVol.Destination]; ok {
diff --git a/test/e2e/run_volume_test.go b/test/e2e/run_volume_test.go
index 8cc2a68de..5fcf340d4 100644
--- a/test/e2e/run_volume_test.go
+++ b/test/e2e/run_volume_test.go
@@ -678,6 +678,15 @@ VOLUME /test/`, ALPINE)
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
+ // Test overlay mount when lowerdir is relative path.
+ f, err = os.Create("hello")
+ Expect(err).To(BeNil(), "os.Create")
+ f.Close()
+ session = podmanTest.Podman([]string{"run", "--rm", "-v", ".:/app:O", ALPINE, "ls", "/app"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.OutputToString()).To(ContainSubstring("hello"))
+ Expect(session).Should(Exit(0))
+
// Make sure modifications in container do not show up on host
session = podmanTest.Podman([]string{"run", "--rm", "-v", volumeFlag, ALPINE, "touch", "/run/test/container"})
session.WaitWithDefaultTimeout()