Skip to content

Commit

Permalink
Make sure the image is unpacked for the current snapshotter
Browse files Browse the repository at this point in the history
Switching snapshotter implementations would result in an error when
preparing a snapshot, check that the image is indeed unpacked for the
current snapshot before trying to prepare a snapshot.

Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
(cherry picked from commit ed32f5e)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
  • Loading branch information
rumpl authored and thaJeztah committed Jun 1, 2023
1 parent 9bdb6ad commit 1fc1977
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions daemon/containerd/image_snapshot.go
Expand Up @@ -3,6 +3,7 @@ package containerd
import (
"context"

"github.com/containerd/containerd"
containerdimages "github.com/containerd/containerd/images"
"github.com/containerd/containerd/leases"
"github.com/containerd/containerd/platforms"
Expand All @@ -12,7 +13,7 @@ import (

// PrepareSnapshot prepares a snapshot from a parent image for a container
func (i *ImageService) PrepareSnapshot(ctx context.Context, id string, parentImage string, platform *ocispec.Platform) error {
desc, err := i.resolveDescriptor(ctx, parentImage)
img, err := i.resolveImage(ctx, parentImage)
if err != nil {
return err
}
Expand All @@ -24,7 +25,19 @@ func (i *ImageService) PrepareSnapshot(ctx context.Context, id string, parentIma
matcher = platforms.Only(*platform)
}

desc, err = containerdimages.Config(ctx, cs, desc, matcher)
platformImg := containerd.NewImageWithPlatform(i.client, img, matcher)
unpacked, err := platformImg.IsUnpacked(ctx, i.snapshotter)
if err != nil {
return err
}

if !unpacked {
if err := platformImg.Unpack(ctx, i.snapshotter); err != nil {
return err
}
}

desc, err := containerdimages.Config(ctx, cs, img.Target, matcher)
if err != nil {
return err
}
Expand Down

0 comments on commit 1fc1977

Please sign in to comment.