Prune named but untagged images if danglingOnly=true

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
This commit is contained in:
Kenfe-Mickael Laventure 2017-01-20 13:42:55 -08:00
parent a3dff7c3db
commit 044fa10309
1 changed files with 20 additions and 15 deletions

View File

@ -135,18 +135,22 @@ func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPrune
deletedImages := []types.ImageDelete{} deletedImages := []types.ImageDelete{}
refs := daemon.referenceStore.References(dgst) refs := daemon.referenceStore.References(dgst)
if len(refs) > 0 { if len(refs) > 0 {
if danglingOnly { shouldDelete := !danglingOnly
// Not a dangling image if !shouldDelete {
continue hasTag := false
for _, ref := range refs {
if _, ok := ref.(reference.NamedTagged); ok {
hasTag = true
break
}
} }
nrRefs := len(refs) // Only delete if it's untagged (i.e. repo:<none>)
for _, ref := range refs { shouldDelete = !hasTag
// If nrRefs == 1, we have an image marked as myreponame:<none>
// i.e. the tag content was changed
if _, ok := ref.(reference.Canonical); ok && nrRefs > 1 {
continue
} }
if shouldDelete {
for _, ref := range refs {
imgDel, err := daemon.ImageDelete(ref.String(), false, true) imgDel, err := daemon.ImageDelete(ref.String(), false, true)
if err != nil { if err != nil {
logrus.Warnf("could not delete reference %s: %v", ref.String(), err) logrus.Warnf("could not delete reference %s: %v", ref.String(), err)
@ -154,6 +158,7 @@ func (daemon *Daemon) ImagesPrune(pruneFilters filters.Args) (*types.ImagesPrune
} }
deletedImages = append(deletedImages, imgDel...) deletedImages = append(deletedImages, imgDel...)
} }
}
} else { } else {
imgDel, err := daemon.ImageDelete(hex, false, true) imgDel, err := daemon.ImageDelete(hex, false, true)
if err != nil { if err != nil {