ctr: unpack the image on run if necessary
Without this `ctr run` can fail with: ctr: parent snapshot sha256:70798fd80095f40b41baa5d107fb61532bfe494d96313fea01e8fcbf4e8743ee does not exist: not found My image was produced by buildkit, which doesn't unpack (I think this makes sense since buildkit doesn't know if I am going to run the image or export/push it etc). Signed-off-by: Ian Campbell <ian.campbell@docker.com>
This commit is contained in:
parent
5bd99af7db
commit
f48cc7d7fe
@ -68,14 +68,24 @@ func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli
|
|||||||
if context.Bool("rootfs") {
|
if context.Bool("rootfs") {
|
||||||
opts = append(opts, oci.WithRootFSPath(ref))
|
opts = append(opts, oci.WithRootFSPath(ref))
|
||||||
} else {
|
} else {
|
||||||
|
snapshotter := context.String("snapshotter")
|
||||||
image, err := client.GetImage(ctx, ref)
|
image, err := client.GetImage(ctx, ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
unpacked, err := image.IsUnpacked(ctx, snapshotter)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !unpacked {
|
||||||
|
if err := image.Unpack(ctx, snapshotter); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
opts = append(opts, oci.WithImageConfig(image))
|
opts = append(opts, oci.WithImageConfig(image))
|
||||||
cOpts = append(cOpts,
|
cOpts = append(cOpts,
|
||||||
containerd.WithImage(image),
|
containerd.WithImage(image),
|
||||||
containerd.WithSnapshotter(context.String("snapshotter")),
|
containerd.WithSnapshotter(snapshotter),
|
||||||
// Even when "readonly" is set, we don't use KindView snapshot here. (#1495)
|
// Even when "readonly" is set, we don't use KindView snapshot here. (#1495)
|
||||||
// We pass writable snapshot to the OCI runtime, and the runtime remounts it as read-only,
|
// We pass writable snapshot to the OCI runtime, and the runtime remounts it as read-only,
|
||||||
// after creating some mount points on demand.
|
// after creating some mount points on demand.
|
||||||
|
Loading…
Reference in New Issue
Block a user