diff --git a/snapshot/snapshot.go b/snapshot/snapshot.go index 007ec95755..55dce5c681 100644 --- a/snapshot/snapshot.go +++ b/snapshot/snapshot.go @@ -345,7 +345,9 @@ func (o *snapshotter) Mounts(ctx context.Context, key string) ([]mount.Mount, er metaSnapshotID = id } } - + if config.GetPassImageURLEnabled() { + return o.passImageNameMounts(ctx, info.Parent) + } snap, err := snapshot.GetSnapshot(ctx, o.ms, key) if err != nil { return nil, errors.Wrapf(err, "get snapshot %s", key) @@ -716,7 +718,25 @@ func overlayMount(options []string) []mount.Mount { }, } } +func (o *snapshotter) passImageNameMounts(ctx context.Context, parent string) ([]mount.Mount, error) { + _, pInfo, _, err := snapshot.GetSnapshotInfo(ctx, o.ms, parent) + if err != nil { + return nil, errors.Wrapf(err, "passImageNameMounts get snapshot %q info failed", parent) + } + passImageOption := fmt.Sprintf("imageurl=%s", pInfo.Labels["containerd.io/snapshot/cri.image-ref"]) + var overlayOptions []string + overlayOptions = append(overlayOptions, passImageOption) + + return []mount.Mount{ + { + Type: "fuse.nydus-overlayfs", + Source: "overlay", + Options: overlayOptions, + }, + }, nil + +} func (o *snapshotter) prepareRemoteSnapshot(id string, labels map[string]string) error { return o.fs.Mount(id, labels) }