diff --git a/daemon/containerd/image_tag.go b/daemon/containerd/image_tag.go index 251e994988..8050af2daa 100644 --- a/daemon/containerd/image_tag.go +++ b/daemon/containerd/image_tag.go @@ -16,14 +16,15 @@ import ( // 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 { - target, err := i.resolveDescriptor(ctx, imageID.String()) + targetImage, err := i.resolveImage(ctx, imageID.String()) if err != nil { return errors.Wrapf(err, "failed to resolve image id %q to a descriptor", imageID.String()) } newImg := containerdimages.Image{ Name: newTag.String(), - Target: target, + Target: targetImage.Target, + Labels: targetImage.Labels, } 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. // 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) 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) // 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 !cerrdefs.IsNotFound(err) { logger.WithError(err).Warn("unexpected error when checking if source image is dangling")