mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix rmi -f removing multiple tags
When an image has multiple tags and rmi is called with force on a tag, only the single tag should be removed. The current behavior is broken and removes all tags and the image. Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
parent
1c8ee617d1
commit
48e7f7963e
2 changed files with 30 additions and 0 deletions
|
@ -84,6 +84,11 @@ func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.I
|
||||||
daemon.EventsService.Log("untag", img.ID, "")
|
daemon.EventsService.Log("untag", img.ID, "")
|
||||||
records = append(records, untaggedRecord)
|
records = append(records, untaggedRecord)
|
||||||
|
|
||||||
|
// If has remaining references then untag finishes the remove
|
||||||
|
if daemon.repositories.HasReferences(img) {
|
||||||
|
return records, nil
|
||||||
|
}
|
||||||
|
|
||||||
removedRepositoryRef = true
|
removedRepositoryRef = true
|
||||||
} else {
|
} else {
|
||||||
// If an ID reference was given AND there is exactly one
|
// If an ID reference was given AND there is exactly one
|
||||||
|
|
|
@ -193,6 +193,31 @@ func (s *DockerSuite) TestRmiWithMultipleRepositories(c *check.C) {
|
||||||
c.Assert(out, checker.Contains, "Untagged: "+newTag)
|
c.Assert(out, checker.Contains, "Untagged: "+newTag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DockerSuite) TestRmiForceWithMultipleRepositories(c *check.C) {
|
||||||
|
testRequires(c, DaemonIsLinux)
|
||||||
|
imageName := "rmiimage"
|
||||||
|
tag1 := imageName + ":tag1"
|
||||||
|
tag2 := imageName + ":tag2"
|
||||||
|
|
||||||
|
_, err := buildImage(tag1,
|
||||||
|
`FROM scratch
|
||||||
|
MAINTAINER "docker"`,
|
||||||
|
true)
|
||||||
|
if err != nil {
|
||||||
|
c.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
dockerCmd(c, "tag", tag1, tag2)
|
||||||
|
|
||||||
|
out, _ := dockerCmd(c, "rmi", "-f", tag2)
|
||||||
|
c.Assert(out, checker.Contains, "Untagged: "+tag2)
|
||||||
|
c.Assert(out, checker.Not(checker.Contains), "Untagged: "+tag1)
|
||||||
|
|
||||||
|
// Check built image still exists
|
||||||
|
images, _ := dockerCmd(c, "images", "-a")
|
||||||
|
c.Assert(images, checker.Contains, imageName, check.Commentf("Built image missing %q; Images: %q", imageName, images))
|
||||||
|
}
|
||||||
|
|
||||||
func (s *DockerSuite) TestRmiBlank(c *check.C) {
|
func (s *DockerSuite) TestRmiBlank(c *check.C) {
|
||||||
testRequires(c, DaemonIsLinux)
|
testRequires(c, DaemonIsLinux)
|
||||||
// try to delete a blank image name
|
// try to delete a blank image name
|
||||||
|
|
Loading…
Reference in a new issue