diff --git a/libpod/container_internal_common.go b/libpod/container_internal_common.go index 86b45a92b3..0ce0f46792 100644 --- a/libpod/container_internal_common.go +++ b/libpod/container_internal_common.go @@ -932,7 +932,10 @@ func (c *Container) resolveWorkDir() error { // we need to return the full error. return fmt.Errorf("detecting workdir %q on container %s: %w", workdir, c.ID(), err) } - if err := os.MkdirAll(resolvedWorkdir, 0755); err != nil { + if err := os.MkdirAll(resolvedWorkdir, 0o755); err != nil { + if errors.Is(err, fs.ErrExist) { + return nil + } return fmt.Errorf("creating container %s workdir: %w", c.ID(), err) } diff --git a/test/e2e/run_working_dir_test.go b/test/e2e/run_working_dir_test.go index b002af7885..dd6b29c22e 100644 --- a/test/e2e/run_working_dir_test.go +++ b/test/e2e/run_working_dir_test.go @@ -57,4 +57,14 @@ WORKDIR /etc/foobar`, ALPINE) Expect(session).Should(ExitCleanly()) Expect(session.OutputToString()).To(Equal("/home/foobar")) }) + + It("podman run on an image with a symlinked workdir", func() { + dockerfile := fmt.Sprintf(`FROM %s +RUN mkdir /A && ln -s /A /B +WORKDIR /B`, ALPINE) + podmanTest.BuildImage(dockerfile, "test", "false") + + session := podmanTest.PodmanExitCleanly("run", "test", "pwd") + Expect(session.OutputToString()).To(Equal("/A")) + }) })