Skip to content

Commit cc8ff80

Browse files
authored
Merge pull request #6031 from tonistiigi/v0.23-rc2-picks
[v0.23] resolver: allow reference matches for local image lookups
2 parents 7fdda10 + 2a2ea09 commit cc8ff80

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

util/resolver/pool.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/containerd/containerd/v2/core/images"
1313
"github.com/containerd/containerd/v2/core/remotes"
1414
"github.com/containerd/containerd/v2/core/remotes/docker"
15+
cerrdefs "github.com/containerd/errdefs"
1516
distreference "github.com/distribution/reference"
1617
"github.com/moby/buildkit/session"
1718
"github.com/moby/buildkit/solver/pb"
@@ -225,7 +226,7 @@ func (r *Resolver) Fetcher(ctx context.Context, ref string) (remotes.Fetcher, er
225226
// Resolve attempts to resolve the reference into a name and descriptor.
226227
func (r *Resolver) Resolve(ctx context.Context, ref string) (string, ocispecs.Descriptor, error) {
227228
if r.mode == ResolveModePreferLocal && r.is != nil {
228-
if img, err := r.is.Get(ctx, ref); err == nil {
229+
if img, err := getImageByRef(ctx, r.is, ref); err == nil {
229230
return ref, img.Target, nil
230231
}
231232
}
@@ -237,14 +238,38 @@ func (r *Resolver) Resolve(ctx context.Context, ref string) (string, ocispecs.De
237238
}
238239

239240
if r.mode == ResolveModeDefault && r.is != nil {
240-
if img, err := r.is.Get(ctx, ref); err == nil {
241+
if img, err := getImageByRef(ctx, r.is, ref); err == nil {
241242
return ref, img.Target, nil
242243
}
243244
}
244245

245246
return "", ocispecs.Descriptor{}, err
246247
}
247248

249+
func getImageByRef(ctx context.Context, is images.Store, ref string) (images.Image, error) {
250+
named, err := distreference.ParseNormalizedNamed(ref)
251+
if err != nil {
252+
return images.Image{}, err
253+
}
254+
255+
name := named.Name()
256+
tag := "latest"
257+
if t, ok := named.(distreference.Tagged); ok {
258+
tag = t.Tag()
259+
}
260+
name = name + ":" + tag
261+
img, err := is.Get(ctx, name)
262+
if err != nil {
263+
return images.Image{}, err
264+
}
265+
if c, ok := named.(distreference.Canonical); ok {
266+
if img.Target.Digest != c.Digest() {
267+
return images.Image{}, errors.WithStack(cerrdefs.ErrNotFound)
268+
}
269+
}
270+
return img, nil
271+
}
272+
248273
type ResolveMode int
249274

250275
const (

0 commit comments

Comments
 (0)