Skip to content

Commit a67ef6c

Browse files
author
user123456
committed
离线镜像下载去掉缓存,避免缓存不完整导致空指针
1 parent 0adf110 commit a67ef6c

File tree

1 file changed

+5
-46
lines changed

1 file changed

+5
-46
lines changed

src/imagetar.go

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -211,51 +211,8 @@ func (is *ImageStreamer) getImageDescriptor(ref name.Reference, options []remote
211211

212212
// getImageDescriptorWithPlatform 获取指定平台的镜像描述符
213213
func (is *ImageStreamer) getImageDescriptorWithPlatform(ref name.Reference, options []remote.Option, platform string) (*remote.Descriptor, error) {
214-
if isCacheEnabled() {
215-
var reference string
216-
if tagged, ok := ref.(name.Tag); ok {
217-
reference = tagged.TagStr()
218-
} else if digested, ok := ref.(name.Digest); ok {
219-
reference = digested.DigestStr()
220-
}
221-
222-
if reference != "" {
223-
cacheKey := buildManifestCacheKeyWithPlatform(ref.Context().String(), reference, platform)
224-
if cachedItem := globalCache.Get(cacheKey); cachedItem != nil {
225-
desc := &remote.Descriptor{
226-
Manifest: cachedItem.Data,
227-
}
228-
log.Printf("使用缓存的manifest: %s (平台: %s)", ref.String(), platform)
229-
return desc, nil
230-
}
231-
}
232-
}
233-
234-
desc, err := remote.Get(ref, options...)
235-
if err != nil {
236-
return nil, err
237-
}
238-
239-
if isCacheEnabled() {
240-
var reference string
241-
if tagged, ok := ref.(name.Tag); ok {
242-
reference = tagged.TagStr()
243-
} else if digested, ok := ref.(name.Digest); ok {
244-
reference = digested.DigestStr()
245-
}
246-
247-
if reference != "" {
248-
cacheKey := buildManifestCacheKeyWithPlatform(ref.Context().String(), reference, platform)
249-
ttl := getManifestTTL(reference)
250-
headers := map[string]string{
251-
"Docker-Content-Digest": desc.Digest.String(),
252-
}
253-
globalCache.Set(cacheKey, desc.Manifest, string(desc.MediaType), headers, ttl)
254-
log.Printf("缓存manifest: %s (平台: %s, TTL: %v)", ref.String(), platform, ttl)
255-
}
256-
}
257-
258-
return desc, nil
214+
// 直接从网络获取完整的descriptor,确保对象完整性
215+
return remote.Get(ref, options...)
259216
}
260217

261218
// StreamImageToGin 流式响应到Gin
@@ -503,7 +460,7 @@ func (is *ImageStreamer) streamSingleImageForBatch(ctx context.Context, tarWrite
503460

504461
switch desc.MediaType {
505462
case types.OCIImageIndex, types.DockerManifestList:
506-
// 处理多架构镜像,复用单个下载的逻辑
463+
// 处理多架构镜像
507464
img, err := is.selectPlatformImage(desc, options)
508465
if err != nil {
509466
return nil, nil, fmt.Errorf("选择平台镜像失败: %w", err)
@@ -574,6 +531,8 @@ func (is *ImageStreamer) streamSingleImageForBatch(ctx context.Context, tarWrite
574531
return manifest, repositories, nil
575532
}
576533

534+
535+
577536
// selectPlatformImage 从多架构镜像中选择合适的平台镜像
578537
func (is *ImageStreamer) selectPlatformImage(desc *remote.Descriptor, options *StreamOptions) (v1.Image, error) {
579538
index, err := desc.ImageIndex()

0 commit comments

Comments
 (0)