c8d/builder: Don't drop fields from created image
Previous image created a new partially filled image.
This caused child images to lose their parent's layers.
Instead of creating a new object and trying to replace its fields, just
clone the original passed image and change its ID to the manifest
digest.
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
(cherry picked from commit 01214bafd2
)
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
parent
aade22d31e
commit
ed2f5d1d85
2 changed files with 10 additions and 4 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue