c8d: Preserve image labels when tagging

Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
This commit is contained in:
Djordje Lukic
2023-10-25 14:56:36 +02:00
parent dcc80204bc
commit f5535d516f

View File

@@ -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")