From d90355ebe8c62b7ab9ee7638812808e3a8bd7aac Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Fri, 12 Jan 2018 13:14:06 -0500 Subject: Prevent containers with dependencies from being removed Signed-off-by: Matthew Heon Closes: #220 Approved by: rhatdan --- libpod/runtime_ctr.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'libpod') diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go index 66dcb2f95..c1078e504 100644 --- a/libpod/runtime_ctr.go +++ b/libpod/runtime_ctr.go @@ -3,6 +3,7 @@ package libpod import ( "os" "path/filepath" + "strings" "time" spec "github.com/opencontainers/runtime-spec/specs-go" @@ -124,6 +125,16 @@ func (r *Runtime) removeContainer(c *Container, force bool) error { return errors.Wrapf(ErrCtrStateInvalid, "container %s is paused, cannot remove until unpaused", c.ID()) } + // Check that no other containers depend on the container + deps, err := r.state.ContainerInUse(c) + if err != nil { + return err + } + if len(deps) != 0 { + depsStr := strings.Join(deps, ", ") + return errors.Wrapf(ErrCtrExists, "container %s has dependent containers which must be removed before it: %s", c.ID(), depsStr) + } + // Check that the container's in a good state to be removed if c.state.State == ContainerStateRunning && force { if err := r.ociRuntime.stopContainer(c, c.StopTimeout()); err != nil { -- cgit v1.2.3-54-g00ecf