From 9f7698a63731cd1000c664894e7f48942be16821 Mon Sep 17 00:00:00 2001 From: Shijiang Wei Date: Tue, 23 Jun 2015 18:38:50 +0800 Subject: [PATCH] raise an error if rmi -f with multiple tags and running container Fixes https://github.com/docker/docker/issues/14116 Signed-off-by: Shijiang Wei --- daemon/image_delete.go | 2 +- integration-cli/docker_cli_rmi_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/daemon/image_delete.go b/daemon/image_delete.go index ccef4b339c..ab6e8e8256 100644 --- a/daemon/image_delete.go +++ b/daemon/image_delete.go @@ -90,7 +90,7 @@ func (daemon *Daemon) imgDeleteHelper(name string, list *[]types.ImageDelete, fi return nil } - if len(repos) <= 1 || (len(repoAndTags) <= 1 && deleteByID) { + if len(repos) <= 1 || deleteByID { if err := daemon.canDeleteImage(img.ID, force); err != nil { return err } diff --git a/integration-cli/docker_cli_rmi_test.go b/integration-cli/docker_cli_rmi_test.go index 8d9f94f2e9..63a126c4d4 100644 --- a/integration-cli/docker_cli_rmi_test.go +++ b/integration-cli/docker_cli_rmi_test.go @@ -161,6 +161,23 @@ func (s *DockerSuite) TestRmiImgIDForce(c *check.C) { } } +// See https://github.com/docker/docker/issues/14116 +func (s *DockerSuite) TestRmiImageIDForceWithRunningContainersAndMultipleTags(c *check.C) { + dockerfile := "FROM busybox\nRUN echo test 14116\n" + imgID, err := buildImage("test-14116", dockerfile, false) + c.Assert(err, check.IsNil) + + newTag := "newtag" + dockerCmd(c, "tag", imgID, newTag) + dockerCmd(c, "run", "-d", imgID, "top") + + out, _, err := dockerCmdWithError(c, "rmi", "-f", imgID) + if err == nil || !strings.Contains(out, "stop it and retry") { + c.Log(out) + c.Fatalf("rmi -f should not delete image with running containers") + } +} + func (s *DockerSuite) TestRmiTagWithExistingContainers(c *check.C) { container := "test-delete-tag" newtag := "busybox:newtag"