修复潜在BUG
This commit is contained in:
@@ -103,14 +103,13 @@ func (is *ImageStreamer) getImageDescriptor(ref name.Reference, options []remote
|
|||||||
|
|
||||||
if reference != "" {
|
if reference != "" {
|
||||||
cacheKey := buildManifestCacheKey(ref.Context().String(), reference)
|
cacheKey := buildManifestCacheKey(ref.Context().String(), reference)
|
||||||
if cachedItem := globalCache.Get(cacheKey); cachedItem != nil {
|
if cachedItem := globalCache.Get(cacheKey); cachedItem != nil {
|
||||||
desc := &remote.Descriptor{
|
desc := &remote.Descriptor{
|
||||||
Manifest: cachedItem.Data,
|
Manifest: cachedItem.Data,
|
||||||
MediaType: types.MediaType(cachedItem.ContentType),
|
|
||||||
}
|
|
||||||
log.Printf("使用缓存的manifest: %s", ref.String())
|
|
||||||
return desc, nil
|
|
||||||
}
|
}
|
||||||
|
log.Printf("使用缓存的manifest: %s", ref.String())
|
||||||
|
return desc, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,45 +277,51 @@ func (is *ImageStreamer) streamDockerFormat(ctx context.Context, tarWriter *tar.
|
|||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
digest, err := layer.Digest()
|
if err := func() error { // ✅ 匿名函数确保资源立即释放
|
||||||
if err != nil {
|
digest, err := layer.Digest()
|
||||||
return err
|
if err != nil {
|
||||||
}
|
return err
|
||||||
layerDigests[i] = digest.String()
|
}
|
||||||
|
layerDigests[i] = digest.String()
|
||||||
|
|
||||||
layerDir := digest.String()
|
layerDir := digest.String()
|
||||||
layerHeader := &tar.Header{
|
layerHeader := &tar.Header{
|
||||||
Name: layerDir + "/",
|
Name: layerDir + "/",
|
||||||
Typeflag: tar.TypeDir,
|
Typeflag: tar.TypeDir,
|
||||||
Mode: 0755,
|
Mode: 0755,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tarWriter.WriteHeader(layerHeader); err != nil {
|
if err := tarWriter.WriteHeader(layerHeader); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
layerReader, err := layer.Uncompressed()
|
layerReader, err := layer.Uncompressed()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer layerReader.Close()
|
defer layerReader.Close() // ✅ 函数结束立即释放
|
||||||
|
|
||||||
size, err := layer.Size()
|
size, err := layer.Size()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
layerTarHeader := &tar.Header{
|
layerTarHeader := &tar.Header{
|
||||||
Name: layerDir + "/layer.tar",
|
Name: layerDir + "/layer.tar",
|
||||||
Size: size,
|
Size: size,
|
||||||
Mode: 0644,
|
Mode: 0644,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tarWriter.WriteHeader(layerTarHeader); err != nil {
|
if err := tarWriter.WriteHeader(layerTarHeader); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := io.Copy(tarWriter, layerReader); err != nil {
|
if _, err := io.Copy(tarWriter, layerReader); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -394,7 +399,7 @@ func handleDirectImageDownload(c *gin.Context) {
|
|||||||
|
|
||||||
imageRef := strings.ReplaceAll(imageParam, "_", "/")
|
imageRef := strings.ReplaceAll(imageParam, "_", "/")
|
||||||
platform := c.Query("platform")
|
platform := c.Query("platform")
|
||||||
tag := c.DefaultQuery("tag")
|
tag := c.DefaultQuery("tag", "")
|
||||||
|
|
||||||
if tag != "" && !strings.Contains(imageRef, ":") && !strings.Contains(imageRef, "@") {
|
if tag != "" && !strings.Contains(imageRef, ":") && !strings.Contains(imageRef, "@") {
|
||||||
imageRef = imageRef + ":" + tag
|
imageRef = imageRef + ":" + tag
|
||||||
|
|||||||
Reference in New Issue
Block a user