diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go index 4757471c98..4d13d7ffb1 100644 --- a/libpod/runtime_ctr.go +++ b/libpod/runtime_ctr.go @@ -741,7 +741,7 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force, remo } // Check that the container's in a good state to be removed. - if c.state.State == define.ContainerStateRunning { + if c.ensureState(define.ContainerStateRunning, define.ContainerStateStopping) { time := c.StopTimeout() if timeout != nil { time = *timeout diff --git a/test/system/055-rm.bats b/test/system/055-rm.bats index 6b682c0e28..a8028ee440 100644 --- a/test/system/055-rm.bats +++ b/test/system/055-rm.bats @@ -113,9 +113,8 @@ load helpers is "$output" "" "Should print no output" } -@test "podman container rm doesn't affect stopping containers" { - local cname=c$(random_string 30) - run_podman run -d --name $cname \ +function __run_healthcheck_container() { + run_podman run -d --name $1 \ --health-cmd /bin/false \ --health-interval 1s \ --health-retries 2 \ @@ -125,6 +124,11 @@ load helpers --health-start-period 0 \ --stop-signal SIGTERM \ $IMAGE sleep infinity +} + +@test "podman container rm doesn't affect stopping containers" { + local cname=c$(random_string 30) + __run_healthcheck_container $cname local cid=$output # We'll use the PID later to confirm that container is not running @@ -159,4 +163,29 @@ load helpers fi } +@test "podman container rm --force doesn't leave running processes" { + local cname=c$(random_string 30) + __run_healthcheck_container $cname + local cid=$output + + # We'll use the PID later to confirm that container is not running + run_podman inspect --format '{{.State.Pid}}' $cname + local pid=$output + + for i in {1..10}; do + run_podman inspect $cname --format '{{.State.Status}}' + if [ "$output" = "stopping" ]; then + break + fi + + sleep 0.5 + done + + run_podman rm -f $cname + + if kill -0 $pid; then + die "Container $cname process is still running (pid $pid)" + fi +} + # vim: filetype=sh