diff --git a/daemon/containerd/image_builder.go b/daemon/containerd/image_builder.go index 05338da2dada5..fb864acd05855 100644 --- a/daemon/containerd/image_builder.go +++ b/daemon/containerd/image_builder.go @@ -505,9 +505,6 @@ func (i *ImageService) CreateImage(ctx context.Context, config []byte, parent st return nil, err } - newImage := dimage.NewImage(dimage.ID(createdImage.Target.Digest)) - newImage.V1Image = imgToCreate.V1Image - newImage.V1Image.ID = string(createdImage.Target.Digest) - newImage.History = imgToCreate.History + newImage := dimage.Clone(imgToCreate, dimage.ID(createdImage.Target.Digest)) return newImage, nil } diff --git a/image/image.go b/image/image.go index 856a845b17f98..d17601323ad0f 100644 --- a/image/image.go +++ b/image/image.go @@ -248,6 +248,15 @@ func NewChildImage(img *Image, child ChildConfig, os string) *Image { } } +// Clone clones an image and changes ID. +func Clone(base *Image, id ID) *Image { + img := *base + img.RootFS = img.RootFS.Clone() + img.V1Image.ID = id.String() + img.computedID = id + return &img +} + // History stores build commands that were used to create an image type History struct { // Created is the timestamp at which the image was created