From f02a9cd97547630a944df83e7e02eac11e8a7021 Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Tue, 27 Feb 2018 15:01:29 -0500 Subject: Handle removing containers with active exec sessions For containers without --force set, an error will be returned For containers with --force, all pids in the container will be stopped, first with SIGTERM and then with SIGKILL after a timeout (this mimics the behavior of stopping a container). Signed-off-by: Matthew Heon Closes: #412 Approved by: baude --- libpod/runtime_ctr.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'libpod/runtime_ctr.go') diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go index 4f8587186..51c2001d0 100644 --- a/libpod/runtime_ctr.go +++ b/libpod/runtime_ctr.go @@ -165,6 +165,17 @@ func (r *Runtime) removeContainer(c *Container, force bool) error { return errors.Wrapf(ErrCtrStateInvalid, "cannot remove container %s as it is %s - running or paused containers cannot be removed", c.ID(), c.state.State.String()) } + // Check that all of our exec sessions have finished + if len(c.state.ExecSessions) != 0 { + if force { + if err := r.ociRuntime.execStopContainer(c, c.StopTimeout()); err != nil { + return err + } + } else { + return errors.Wrapf(ErrCtrStateInvalid, "cannot remove container %s as it has active exec sessions", c.ID()) + } + } + // Check that no other containers depend on the container deps, err := r.state.ContainerInUse(c) if err != nil { -- cgit v1.2.3-54-g00ecf