Parcourir la source

c8d/commit: Use manifest digest for dangling image

Previously commit incorrectly used image config digest as an image id
for the new image which isn't consistent with the image target.
This changes it to use manifest digest.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
Paweł Gronowski il y a 2 ans
Parent
commit
24804e67f5
1 fichiers modifiés avec 8 ajouts et 8 suppressions
  1. 8 8
      daemon/containerd/image_commit.go

+ 8 - 8
daemon/containerd/image_commit.go

@@ -87,14 +87,14 @@ func (i *ImageService) CommitImage(ctx context.Context, cc backend.CommitConfig)
 	}
 	}
 
 
 	layers := append(manifest.Layers, diffLayerDesc)
 	layers := append(manifest.Layers, diffLayerDesc)
-	commitManifestDesc, configDigest, err := writeContentsForImage(ctx, i.snapshotter, cs, imageConfig, layers)
+	commitManifestDesc, err := writeContentsForImage(ctx, i.snapshotter, cs, imageConfig, layers)
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err
 	}
 	}
 
 
 	// image create
 	// image create
 	img := images.Image{
 	img := images.Image{
-		Name:      danglingImageName(configDigest.Digest()),
+		Name:      danglingImageName(commitManifestDesc.Digest),
 		Target:    commitManifestDesc,
 		Target:    commitManifestDesc,
 		CreatedAt: time.Now(),
 		CreatedAt: time.Now(),
 	}
 	}
@@ -156,10 +156,10 @@ func generateCommitImageConfig(ctx context.Context, container *containerapi.Conf
 }
 }
 
 
 // writeContentsForImage will commit oci image config and manifest into containerd's content store.
 // writeContentsForImage will commit oci image config and manifest into containerd's content store.
-func writeContentsForImage(ctx context.Context, snName string, cs content.Store, newConfig ocispec.Image, layers []ocispec.Descriptor) (ocispec.Descriptor, image.ID, error) {
+func writeContentsForImage(ctx context.Context, snName string, cs content.Store, newConfig ocispec.Image, layers []ocispec.Descriptor) (ocispec.Descriptor, error) {
 	newConfigJSON, err := json.Marshal(newConfig)
 	newConfigJSON, err := json.Marshal(newConfig)
 	if err != nil {
 	if err != nil {
-		return ocispec.Descriptor{}, "", err
+		return ocispec.Descriptor{}, err
 	}
 	}
 
 
 	configDesc := ocispec.Descriptor{
 	configDesc := ocispec.Descriptor{
@@ -184,7 +184,7 @@ func writeContentsForImage(ctx context.Context, snName string, cs content.Store,
 
 
 	newMfstJSON, err := json.MarshalIndent(newMfst, "", "    ")
 	newMfstJSON, err := json.MarshalIndent(newMfst, "", "    ")
 	if err != nil {
 	if err != nil {
-		return ocispec.Descriptor{}, "", err
+		return ocispec.Descriptor{}, err
 	}
 	}
 
 
 	newMfstDesc := ocispec.Descriptor{
 	newMfstDesc := ocispec.Descriptor{
@@ -203,7 +203,7 @@ func writeContentsForImage(ctx context.Context, snName string, cs content.Store,
 
 
 	err = content.WriteBlob(ctx, cs, newMfstDesc.Digest.String(), bytes.NewReader(newMfstJSON), newMfstDesc, content.WithLabels(labels))
 	err = content.WriteBlob(ctx, cs, newMfstDesc.Digest.String(), bytes.NewReader(newMfstJSON), newMfstDesc, content.WithLabels(labels))
 	if err != nil {
 	if err != nil {
-		return ocispec.Descriptor{}, "", err
+		return ocispec.Descriptor{}, err
 	}
 	}
 
 
 	// config should reference to snapshotter
 	// config should reference to snapshotter
@@ -212,10 +212,10 @@ func writeContentsForImage(ctx context.Context, snName string, cs content.Store,
 	})
 	})
 	err = content.WriteBlob(ctx, cs, configDesc.Digest.String(), bytes.NewReader(newConfigJSON), configDesc, labelOpt)
 	err = content.WriteBlob(ctx, cs, configDesc.Digest.String(), bytes.NewReader(newConfigJSON), configDesc, labelOpt)
 	if err != nil {
 	if err != nil {
-		return ocispec.Descriptor{}, "", err
+		return ocispec.Descriptor{}, err
 	}
 	}
 
 
-	return newMfstDesc, image.ID(configDesc.Digest), nil
+	return newMfstDesc, nil
 }
 }
 
 
 // createDiff creates a layer diff into containerd's content store.
 // createDiff creates a layer diff into containerd's content store.