瀏覽代碼

c8d: Preserve image labels when tagging

Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
Djordje Lukic 1 年之前
父節點
當前提交
f5535d516f
共有 1 個文件被更改,包括 5 次插入4 次删除
  1. 5 4
      daemon/containerd/image_tag.go

+ 5 - 4
daemon/containerd/image_tag.go

@@ -16,14 +16,15 @@ import (
 
 
 // TagImage creates an image named as newTag and targeting the given descriptor id.
 // TagImage creates an image named as newTag and targeting the given descriptor id.
 func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag reference.Named) error {
 func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag reference.Named) error {
-	target, err := i.resolveDescriptor(ctx, imageID.String())
+	targetImage, err := i.resolveImage(ctx, imageID.String())
 	if err != nil {
 	if err != nil {
 		return errors.Wrapf(err, "failed to resolve image id %q to a descriptor", imageID.String())
 		return errors.Wrapf(err, "failed to resolve image id %q to a descriptor", imageID.String())
 	}
 	}
 
 
 	newImg := containerdimages.Image{
 	newImg := containerdimages.Image{
 		Name:   newTag.String(),
 		Name:   newTag.String(),
-		Target: target,
+		Target: targetImage.Target,
+		Labels: targetImage.Labels,
 	}
 	}
 
 
 	is := i.client.ImageService()
 	is := i.client.ImageService()
@@ -40,7 +41,7 @@ func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag re
 
 
 		// Check if image we would replace already resolves to the same target.
 		// Check if image we would replace already resolves to the same target.
 		// No need to do anything.
 		// No need to do anything.
-		if replacedImg.Target.Digest == target.Digest {
+		if replacedImg.Target.Digest == targetImage.Target.Digest {
 			i.LogImageEvent(imageID.String(), reference.FamiliarString(newTag), events.ActionTag)
 			i.LogImageEvent(imageID.String(), reference.FamiliarString(newTag), events.ActionTag)
 			return nil
 			return nil
 		}
 		}
@@ -65,7 +66,7 @@ func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag re
 	defer i.LogImageEvent(imageID.String(), reference.FamiliarString(newTag), events.ActionTag)
 	defer i.LogImageEvent(imageID.String(), reference.FamiliarString(newTag), events.ActionTag)
 
 
 	// The tag succeeded, check if the source image is dangling
 	// The tag succeeded, check if the source image is dangling
-	sourceDanglingImg, err := is.Get(compatcontext.WithoutCancel(ctx), danglingImageName(target.Digest))
+	sourceDanglingImg, err := is.Get(compatcontext.WithoutCancel(ctx), danglingImageName(targetImage.Target.Digest))
 	if err != nil {
 	if err != nil {
 		if !cerrdefs.IsNotFound(err) {
 		if !cerrdefs.IsNotFound(err) {
 			logger.WithError(err).Warn("unexpected error when checking if source image is dangling")
 			logger.WithError(err).Warn("unexpected error when checking if source image is dangling")