From dc42304f3804632d01345478ab9b1f122b48d516 Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Mon, 1 Apr 2019 18:17:16 -0400 Subject: Sending signals to containers prevents restart policy Noticed this when testing some behavior with Docker. Signed-off-by: Matthew Heon --- libpod/container_api.go | 9 ++++++++- libpod/pod_api.go | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libpod/container_api.go b/libpod/container_api.go index 46c913e99..8b3dd4186 100644 --- a/libpod/container_api.go +++ b/libpod/container_api.go @@ -199,8 +199,15 @@ func (c *Container) Kill(signal uint) error { if c.state.State != ContainerStateRunning { return errors.Wrapf(ErrCtrStateInvalid, "can only kill running containers") } + defer c.newContainerEvent(events.Kill) - return c.runtime.ociRuntime.killContainer(c, signal) + if err := c.runtime.ociRuntime.killContainer(c, signal); err != nil { + return err + } + + c.state.StoppedByUser = true + + return c.save() } // Exec starts a new process inside the container diff --git a/libpod/pod_api.go b/libpod/pod_api.go index 9a6baf23e..9ed5c88eb 100644 --- a/libpod/pod_api.go +++ b/libpod/pod_api.go @@ -364,6 +364,13 @@ func (p *Pod) Kill(signal uint) (map[string]error, error) { } logrus.Debugf("Killed container %s with signal %d", ctr.ID(), signal) + + ctr.state.StoppedByUser = true + if err := ctr.save(); err != nil { + ctrErrors[ctr.ID()] = err + } + + ctr.lock.Unlock() } if len(ctrErrors) > 0 { -- cgit v1.2.3-54-g00ecf