diff options
author | Matthew Heon <matthew.heon@pm.me> | 2019-09-20 01:22:19 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2019-09-20 09:30:15 -0400 |
commit | 407fba49425ebfa615b3d1c558d79ec1b82622fc (patch) | |
tree | 1bd2463c12848896a8b6ce0fc25cbd23dee5cf28 /libpod/container_internal.go | |
parent | 9dc764c1976944c2e14480e6dd0a7db6ced37107 (diff) | |
download | podman-407fba49425ebfa615b3d1c558d79ec1b82622fc.tar.gz podman-407fba49425ebfa615b3d1c558d79ec1b82622fc.tar.bz2 podman-407fba49425ebfa615b3d1c558d79ec1b82622fc.zip |
Unconditionally remove conmon files before starting
We've been seeing a lot of issues (ref: #4061, but there are
others) where Podman hiccups on trying to start a container,
because some temporary files have been retained and Conmon will
not overwrite them.
If we're calling start() we can safely assume that we really want
those files gone so the container starts without error, so invoke
the cleanup routine. It's relatively cheap (four file removes) so
it shouldn't hurt us that much.
Also contains a small simplification to the removeConmonFiles
logic - we don't need to stat-then-remove when ignoring ENOENT is
fine.
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'libpod/container_internal.go')
-rw-r--r-- | libpod/container_internal.go | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go index 8b96b3f62..42028c397 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -646,14 +646,8 @@ func (c *Container) removeConmonFiles() error { // Remove the exit file so we don't leak memory in tmpfs exitFile := filepath.Join(c.ociRuntime.exitsDir, c.ID()) - if _, err := os.Stat(exitFile); err != nil { - if !os.IsNotExist(err) { - return errors.Wrapf(err, "error running stat on container %s exit file", c.ID()) - } - } else { - if err := os.Remove(exitFile); err != nil { - return errors.Wrapf(err, "error removing container %s exit file", c.ID()) - } + if err := os.Remove(exitFile); err != nil && !os.IsNotExist(err) { + return errors.Wrapf(err, "error removing container %s exit file", c.ID()) } return nil @@ -922,6 +916,12 @@ func (c *Container) init(ctx context.Context, retainRetries bool) error { span.SetTag("struct", "container") defer span.Finish() + // Unconditionally remove conmon temporary files. + // We've been running into far too many issues where they block startup. + if err := c.removeConmonFiles(); err != nil { + return err + } + // Generate the OCI newSpec newSpec, err := c.generateSpec(ctx) if err != nil { |