@@ -12,6 +12,7 @@ import (
12
12
"github.com/containerd/containerd/v2/core/images"
13
13
"github.com/containerd/containerd/v2/core/remotes"
14
14
"github.com/containerd/containerd/v2/core/remotes/docker"
15
+ cerrdefs "github.com/containerd/errdefs"
15
16
distreference "github.com/distribution/reference"
16
17
"github.com/moby/buildkit/session"
17
18
"github.com/moby/buildkit/solver/pb"
@@ -225,7 +226,7 @@ func (r *Resolver) Fetcher(ctx context.Context, ref string) (remotes.Fetcher, er
225
226
// Resolve attempts to resolve the reference into a name and descriptor.
226
227
func (r * Resolver ) Resolve (ctx context.Context , ref string ) (string , ocispecs.Descriptor , error ) {
227
228
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 {
229
230
return ref , img .Target , nil
230
231
}
231
232
}
@@ -237,14 +238,38 @@ func (r *Resolver) Resolve(ctx context.Context, ref string) (string, ocispecs.De
237
238
}
238
239
239
240
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 {
241
242
return ref , img .Target , nil
242
243
}
243
244
}
244
245
245
246
return "" , ocispecs.Descriptor {}, err
246
247
}
247
248
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
+
248
273
type ResolveMode int
249
274
250
275
const (
0 commit comments