Make sure to match image having config name equal to the wanted blob
digest. Remember the image and allow access to its layers.
Signed-off-by: Michal Minář <miminar@redhat.com>
... | ... |
@@ -203,5 +203,12 @@ func imageHasBlob( |
203 | 203 |
} |
204 | 204 |
} |
205 | 205 |
|
206 |
+ // only manifest V2 schema2 has docker image config filled where dockerImage.Metadata.id is its digest |
|
207 |
+ if len(image.DockerImageConfig) > 0 && image.DockerImageMetadata.ID == blobDigest { |
|
208 |
+ // remember manifest config reference of schema 2 as well |
|
209 |
+ r.rememberLayersOfImage(image, cacheName) |
|
210 |
+ return true |
|
211 |
+ } |
|
212 |
+ |
|
206 | 213 |
return false |
207 | 214 |
} |
... | ... |
@@ -544,7 +544,7 @@ func (r *repository) getImageStreamImage(dgst digest.Digest) (*imageapi.ImageStr |
544 | 544 |
|
545 | 545 |
// rememberLayersOfImage caches the layer digests of given image |
546 | 546 |
func (r *repository) rememberLayersOfImage(image *imageapi.Image, cacheName string) { |
547 |
- if len(image.DockerImageLayers) == 0 && len(image.DockerImageManifestMediaType) > 0 { |
|
547 |
+ if len(image.DockerImageLayers) == 0 && len(image.DockerImageManifestMediaType) > 0 && len(image.DockerImageConfig) == 0 { |
|
548 | 548 |
// image has no layers |
549 | 549 |
return |
550 | 550 |
} |
... | ... |
@@ -553,6 +553,10 @@ func (r *repository) rememberLayersOfImage(image *imageapi.Image, cacheName stri |
553 | 553 |
for _, layer := range image.DockerImageLayers { |
554 | 554 |
r.cachedLayers.RememberDigest(digest.Digest(layer.Name), r.blobrepositorycachettl, cacheName) |
555 | 555 |
} |
556 |
+ // remember reference to manifest config as well for schema 2 |
|
557 |
+ if image.DockerImageManifestMediaType == schema2.MediaTypeManifest && len(image.DockerImageMetadata.ID) > 0 { |
|
558 |
+ r.cachedLayers.RememberDigest(digest.Digest(image.DockerImageMetadata.ID), r.blobrepositorycachettl, cacheName) |
|
559 |
+ } |
|
556 | 560 |
return |
557 | 561 |
} |
558 | 562 |
|