diff options
author | Matthew Heon <matthew.heon@pm.me> | 2020-07-30 09:24:09 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2020-07-30 12:01:05 -0400 |
commit | 9f5a11cacc47464e7fed44444b59104373abb5b0 (patch) | |
tree | 94554f70bd5c4d6ffe2e8c84ab0bc10ee85eed62 /libpod | |
parent | 05b3e0e16bbbfede19bc5d817c62598e1ac6fa70 (diff) | |
download | podman-9f5a11cacc47464e7fed44444b59104373abb5b0.tar.gz podman-9f5a11cacc47464e7fed44444b59104373abb5b0.tar.bz2 podman-9f5a11cacc47464e7fed44444b59104373abb5b0.zip |
Ensure that 'rmi --force' evicts Podman containers
The logic for `podman rmi --force` includes a bit of code that
will remove Libpod containers using Libpod's container removal
logic - this ensures that they're cleanly and completely removed.
For other containers (Buildah, CRI-O, etc) we fall back to
manually removing the containers using the image from c/storage.
Unfortunately, our logic for invoking the Podman removal function
had an error, and it did not properly handle cases where we were
force-removing an image with >1 name. Force-removing such images
by ID guarantees their removal, not just an untag of a single
name; our code for identifying whether to remove containers did
not proper detect this case, so we fell through and deleted the
Podman containers as storage containers, leaving traces of them
in the Libpod DB.
Fixes #7153
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/runtime_img.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libpod/runtime_img.go b/libpod/runtime_img.go index 72cd26a4e..4b5129f44 100644 --- a/libpod/runtime_img.go +++ b/libpod/runtime_img.go @@ -51,7 +51,7 @@ func (r *Runtime) RemoveImage(ctx context.Context, img *image.Image, force bool) imageCtrs = append(imageCtrs, ctr) } } - if len(imageCtrs) > 0 && len(img.Names()) <= 1 { + if len(imageCtrs) > 0 && (len(img.Names()) <= 1 || (force && img.InputIsID())) { if force { for _, ctr := range imageCtrs { if err := r.removeContainer(ctx, ctr, true, false, false); err != nil { |