diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-01-26 16:59:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-26 16:59:57 +0100 |
commit | ad1e0bb77f56499ff22eeb8123aaab8e57a43c03 (patch) | |
tree | 2d51bab04ef8f221273d3f9d18aceb847daf5dc1 /libpod/container_api.go | |
parent | 41dd1eb8a22f6ac70dd48b53993c9d6ce4476eb4 (diff) | |
parent | 0f668aa0857815f388ef1bb880efa4b2e889edaf (diff) | |
download | podman-ad1e0bb77f56499ff22eeb8123aaab8e57a43c03.tar.gz podman-ad1e0bb77f56499ff22eeb8123aaab8e57a43c03.tar.bz2 podman-ad1e0bb77f56499ff22eeb8123aaab8e57a43c03.zip |
Merge pull request #9054 from vrothberg/fix-9040
make sure the workdir exists on container mount
Diffstat (limited to 'libpod/container_api.go')
-rw-r--r-- | libpod/container_api.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libpod/container_api.go b/libpod/container_api.go index 0d62a2dd7..951227a4f 100644 --- a/libpod/container_api.go +++ b/libpod/container_api.go @@ -776,3 +776,32 @@ func (c *Container) ShouldRestart(ctx context.Context) bool { } return c.shouldRestart() } + +// ResolvePath resolves the specified path on the root for the container. The +// root must either be the mounted image of the container or the already +// mounted container storage. +// +// It returns the resolved root and the resolved path. Note that the path may +// resolve to the container's mount point or to a volume or bind mount. +func (c *Container) ResolvePath(ctx context.Context, root string, path string) (string, string, error) { + logrus.Debugf("Resolving path %q (root %q) on container %s", path, root, c.ID()) + + // Minimal sanity checks. + if len(root)*len(path) == 0 { + return "", "", errors.Wrapf(define.ErrInternal, "ResolvePath: root (%q) and path (%q) must be non empty", root, path) + } + if _, err := os.Stat(root); err != nil { + return "", "", errors.Wrapf(err, "cannot locate root to resolve path on container %s", c.ID()) + } + + if !c.batched { + c.lock.Lock() + defer c.lock.Unlock() + + if err := c.syncContainer(); err != nil { + return "", "", err + } + } + + return c.resolvePath(root, path) +} |