From a0605107d713f7f8a25277b06369134d17781077 Mon Sep 17 00:00:00 2001 From: Jessica Frazelle Date: Mon, 17 Nov 2014 12:49:29 -0800 Subject: [PATCH 1/2] Add test for bug (9056) where rmi -f fails with "no such id". Docker-DCO-1.1-Signed-off-by: Jessica Frazelle (github: jfrazelle) --- integration-cli/docker_cli_rmi_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/integration-cli/docker_cli_rmi_test.go b/integration-cli/docker_cli_rmi_test.go index c28e771971..98cadfe853 100644 --- a/integration-cli/docker_cli_rmi_test.go +++ b/integration-cli/docker_cli_rmi_test.go @@ -99,3 +99,23 @@ func TestRmiTagWithExistingContainers(t *testing.T) { logDone("rmi - delete tag with existing containers") } + +func TestRmiForceWithExistingContainers(t *testing.T) { + image := "busybox-clone" + if out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "build", "--no-cache", "-t", image, "/docker-busybox")); err != nil { + t.Fatalf("Could not build %s: %s, %v", image, out, err) + } + + if out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "run", "--name", "test-force-rmi", image, "/bin/true")); err != nil { + t.Fatalf("Could not run container: %s, %v", out, err) + } + + out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "rmi", "-f", image)) + if err != nil { + t.Fatalf("Could not remove image %s: %s, %v", image, out, err) + } + + deleteAllContainers() + + logDone("rmi - force delete with existing containers") +} From ac40e7cbb3cf01568b3763abe04af814d89a6f36 Mon Sep 17 00:00:00 2001 From: Jessica Frazelle Date: Mon, 17 Nov 2014 13:16:33 -0800 Subject: [PATCH 2/2] Fix for rmi -f when error "no such id". (9056) Docker-DCO-1.1-Signed-off-by: Jessica Frazelle (github: jfrazelle) --- daemon/image_delete.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/daemon/image_delete.go b/daemon/image_delete.go index 332db7b4c0..b0b0c3a023 100644 --- a/daemon/image_delete.go +++ b/daemon/image_delete.go @@ -133,6 +133,9 @@ func (daemon *Daemon) canDeleteImage(imgID string, force bool) error { for _, container := range daemon.List() { parent, err := daemon.Repositories().LookupImage(container.Image) if err != nil { + if daemon.Graph().IsNotExist(err) { + return nil + } return err }