summaryrefslogtreecommitdiff
path: root/libpod
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2020-07-30 09:24:09 -0400
committerMatthew Heon <matthew.heon@pm.me>2020-07-30 12:01:05 -0400
commit9f5a11cacc47464e7fed44444b59104373abb5b0 (patch)
tree94554f70bd5c4d6ffe2e8c84ab0bc10ee85eed62 /libpod
parent05b3e0e16bbbfede19bc5d817c62598e1ac6fa70 (diff)
downloadpodman-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.go2
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 {