Ensure that cleanup runs before we set Removing state

Cleaning up the OCI runtime is not allowed in the Removing state.
To ensure it is actually cleaned up, when calling cleanup() as
part of removing a container, do so before we set the Removing
state, so we can successfully remove.

Signed-off-by: Matthew Heon <mheon@redhat.com>
This commit is contained in:
Matthew Heon
2020-05-14 11:58:02 -04:00
parent 83a1e2e5d2
commit 892d81685c

View File

@ -488,20 +488,25 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force bool,
}
}
var cleanupErr error
// Clean up network namespace, cgroups, mounts.
// Do this before we set ContainerStateRemoving, to ensure that we can
// actually remove from the OCI runtime.
if err := c.cleanup(ctx); err != nil {
cleanupErr = errors.Wrapf(err, "error cleaning up container %s", c.ID())
}
// Set ContainerStateRemoving
c.state.State = define.ContainerStateRemoving
if err := c.save(); err != nil {
if cleanupErr != nil {
logrus.Errorf(err.Error())
}
return errors.Wrapf(err, "unable to set container %s removing state in database", c.ID())
}
var cleanupErr error
// Clean up network namespace, cgroups, mounts
if err := c.cleanup(ctx); err != nil {
cleanupErr = errors.Wrapf(err, "error cleaning up container %s", c.ID())
}
// Stop the container's storage
if err := c.teardownStorage(); err != nil {
if cleanupErr == nil {