Browse Source

c8d/inspect: Add digested reference to details

Fixes `RepoDigests` value being `null` in inspect output.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
Paweł Gronowski 2 years ago
parent
commit
44d0522848
1 changed files with 16 additions and 3 deletions
  1. 16 3
      daemon/containerd/image.go

+ 16 - 3
daemon/containerd/image.go

@@ -25,6 +25,7 @@ import (
 	"github.com/opencontainers/go-digest"
 	"github.com/opencontainers/go-digest"
 	ocispec "github.com/opencontainers/image-spec/specs-go/v1"
 	ocispec "github.com/opencontainers/image-spec/specs-go/v1"
 	"github.com/pkg/errors"
 	"github.com/pkg/errors"
+	"github.com/sirupsen/logrus"
 	"golang.org/x/sync/semaphore"
 	"golang.org/x/sync/semaphore"
 )
 )
 
 
@@ -98,7 +99,9 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
-		tags := make([]reference.Named, 0, len(tagged))
+
+		// Each image will result in 2 references (named and digested).
+		refs := make([]reference.Named, 0, len(tagged)*2)
 		for _, i := range tagged {
 		for _, i := range tagged {
 			if i.UpdatedAt.After(lastUpdated) {
 			if i.UpdatedAt.After(lastUpdated) {
 				lastUpdated = i.UpdatedAt
 				lastUpdated = i.UpdatedAt
@@ -107,11 +110,21 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
 			if err != nil {
 			if err != nil {
 				return nil, err
 				return nil, err
 			}
 			}
-			tags = append(tags, name)
+			refs = append(refs, name)
+
+			digested, err := reference.WithDigest(reference.TrimNamed(name), desc.Digest)
+			if err != nil {
+				// This could only happen if digest is invalid, but considering that
+				// we get it from the Descriptor it's highly unlikely.
+				// Log error just in case.
+				logrus.WithError(err).Error("failed to create digested reference")
+				continue
+			}
+			refs = append(refs, digested)
 		}
 		}
 
 
 		img.Details = &image.Details{
 		img.Details = &image.Details{
-			References:  tags,
+			References:  refs,
 			Size:        size,
 			Size:        size,
 			Metadata:    nil,
 			Metadata:    nil,
 			Driver:      i.snapshotter,
 			Driver:      i.snapshotter,