Browse Source

Merge pull request #46595 from vvoland/c8d-rmi-untaggeddangling

c8d/rmi: Don't emit Untagged for dangling images
Sebastiaan van Stijn 1 year ago
parent
commit
a67b7554c8
2 changed files with 9 additions and 4 deletions
  1. 6 3
      daemon/containerd/image_delete.go
  2. 3 1
      daemon/containerd/soft_delete.go

+ 6 - 3
daemon/containerd/image_delete.go

@@ -64,7 +64,8 @@ func (i *ImageService) ImageDelete(ctx context.Context, imageRef string, force,
 
 	imgID := image.ID(img.Target.Digest)
 
-	if isImageIDPrefix(imgID.String(), imageRef) {
+	explicitDanglingRef := strings.HasPrefix(imageRef, imageNameDanglingPrefix) && isDanglingImage(img)
+	if isImageIDPrefix(imgID.String(), imageRef) || explicitDanglingRef {
 		return i.deleteAll(ctx, img, force, prune)
 	}
 
@@ -260,8 +261,10 @@ func (i *ImageService) imageDeleteHelper(ctx context.Context, img images.Image,
 		return err
 	}
 
-	i.LogImageEvent(imgID.String(), imgID.String(), events.ActionUnTag)
-	*records = append(*records, types.ImageDeleteResponseItem{Untagged: reference.FamiliarString(untaggedRef)})
+	if !isDanglingImage(img) {
+		i.LogImageEvent(imgID.String(), imgID.String(), events.ActionUnTag)
+		*records = append(*records, types.ImageDeleteResponseItem{Untagged: reference.FamiliarString(untaggedRef)})
+	}
 
 	return nil
 }

+ 3 - 1
daemon/containerd/soft_delete.go

@@ -11,6 +11,8 @@ import (
 	"github.com/pkg/errors"
 )
 
+const imageNameDanglingPrefix = "moby-dangling@"
+
 // softImageDelete deletes the image, making sure that there are other images
 // that reference the content of the deleted image.
 // If no other image exists, a dangling one is created.
@@ -74,7 +76,7 @@ func (i *ImageService) ensureDanglingImage(ctx context.Context, from containerdi
 }
 
 func danglingImageName(digest digest.Digest) string {
-	return "moby-dangling@" + digest.String()
+	return imageNameDanglingPrefix + digest.String()
 }
 
 func isDanglingImage(image containerdimages.Image) bool {