summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2021-08-30 18:12:29 -0400
committerGitHub <noreply@github.com>2021-08-30 18:12:29 -0400
commit95ac8f180f26d7ed4cf2945aa206a156b7a169ca (patch)
tree4e428c0ca8beab10224e9d959aab62d6f6516928
parentc97666723104fde9886ba789fe4ac34a4294981b (diff)
parentec1f350ee5a3776f6fac6e96e1277d0ab36d130a (diff)
downloadpodman-95ac8f180f26d7ed4cf2945aa206a156b7a169ca.tar.gz
podman-95ac8f180f26d7ed4cf2945aa206a156b7a169ca.tar.bz2
podman-95ac8f180f26d7ed4cf2945aa206a156b7a169ca.zip
Merge pull request #11353 from flouthoc/resolve-workdir-after-mounts
container: resolve workdir during initialization after all the mounts are completed.
-rw-r--r--libpod/container_internal.go5
-rw-r--r--libpod/container_internal_linux.go5
-rw-r--r--test/e2e/run_volume_test.go20
3 files changed, 25 insertions, 5 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 6717ada59..9082b136a 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -1072,6 +1072,11 @@ func (c *Container) init(ctx context.Context, retainRetries bool) error {
return err
}
+ // Make sure the workdir exists while initializing container
+ if err := c.resolveWorkDir(); err != nil {
+ return err
+ }
+
// Save the OCI newSpec to disk
if err := c.saveSpec(newSpec); err != nil {
return err
diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go
index 8b73c82de..b624f44ac 100644
--- a/libpod/container_internal_linux.go
+++ b/libpod/container_internal_linux.go
@@ -176,11 +176,6 @@ func (c *Container) prepare() error {
return err
}
- // Make sure the workdir exists
- if err := c.resolveWorkDir(); err != nil {
- return err
- }
-
return nil
}
diff --git a/test/e2e/run_volume_test.go b/test/e2e/run_volume_test.go
index d1f6ea80e..59937b6c0 100644
--- a/test/e2e/run_volume_test.go
+++ b/test/e2e/run_volume_test.go
@@ -222,6 +222,26 @@ var _ = Describe("Podman run with volumes", func() {
Expect(matches[0]).To(Not(ContainSubstring("nosuid")))
})
+ // Container should start when workdir is overlayed volume
+ It("podman run with volume mounted as overlay and used as workdir", func() {
+ SkipIfRemote("Overlay volumes only work locally")
+ if os.Getenv("container") != "" {
+ Skip("Overlay mounts not supported when running in a container")
+ }
+ if rootless.IsRootless() {
+ if _, err := exec.LookPath("fuse-overlayfs"); err != nil {
+ Skip("Fuse-Overlayfs required for rootless overlay mount test")
+ }
+ }
+ mountPath := filepath.Join(podmanTest.TempDir, "secrets")
+ os.Mkdir(mountPath, 0755)
+
+ //Container should be able to start with custom overlayed volume
+ session := podmanTest.Podman([]string{"run", "--rm", "-v", mountPath + ":/data:O", "--workdir=/data", ALPINE, "echo", "hello"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ })
+
It("podman run with noexec can't exec", func() {
session := podmanTest.Podman([]string{"run", "--rm", "-v", "/bin:/hostbin:noexec", ALPINE, "/hostbin/ls", "/"})
session.WaitWithDefaultTimeout()