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 <matthew.heon@gmail.com>

Closes: #412
Approved by: baude
This commit is contained in:
Matthew Heon
2018-02-27 15:01:29 -05:00
committed by Atomic Bot
parent 70baafc1c7
commit f02a9cd975
3 changed files with 115 additions and 0 deletions

View File

@ -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 {