mirror of
https://github.com/containers/podman.git
synced 2025-10-17 19:24:04 +08:00
Remove container from storage on --force
Currently we can get into a state where a container exists in storage but does not exist in libpod. If the user forces a removal of this container, then we should remove it from storage even if the container is owned by another tool. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -10,7 +10,9 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/storage"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
@ -564,3 +566,16 @@ func (r *Runtime) Export(name string, path string) error {
|
||||
return ctr.Export(path)
|
||||
|
||||
}
|
||||
|
||||
// RemoveContainersFromStorage attempt to remove containers from storage that do not exist in libpod database
|
||||
func (r *Runtime) RemoveContainersFromStorage(ctrs []string) {
|
||||
for _, i := range ctrs {
|
||||
// if the container does not exist in database, attempt to remove it from storage
|
||||
if _, err := r.LookupContainer(i); err != nil && errors.Cause(err) == image.ErrNoSuchCtr {
|
||||
r.storageService.UnmountContainerImage(i, true)
|
||||
if err := r.storageService.DeleteContainer(i); err != nil && errors.Cause(err) != storage.ErrContainerUnknown {
|
||||
logrus.Errorf("Failed to remove container %q from storage: %s", i, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user