From a38beef184a53a308d31dc9f2224f206038deb39 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Fri, 23 Jan 2026 10:46:49 +0100 Subject: [PATCH] manifest inspect: add some debug logs Signed-off-by: Sebastiaan van Stijn --- cli/command/manifest/inspect.go | 4 ++++ internal/registry/service.go | 2 +- internal/registryclient/client.go | 16 +++++++--------- internal/registryclient/fetcher.go | 14 ++++++++++++-- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/cli/command/manifest/inspect.go b/cli/command/manifest/inspect.go index b4beff387772..ff3528aad8e8 100644 --- a/cli/command/manifest/inspect.go +++ b/cli/command/manifest/inspect.go @@ -11,6 +11,7 @@ import ( "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/manifest/types" "github.com/docker/distribution/manifest/manifestlist" + "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -69,10 +70,12 @@ func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) } // Try a local manifest list first + logrus.WithFields(logrus.Fields{"name": namedRef}).Debug("trying local manifest") localManifestList, err := newManifestStore(dockerCli).GetList(namedRef) if err == nil { return printManifestList(dockerCli, namedRef, localManifestList, opts) } + logrus.WithFields(logrus.Fields{"name": namedRef}).Debug("trying remote manifest") // Next try a remote manifest registryClient := newRegistryClient(dockerCli, opts.insecure) @@ -82,6 +85,7 @@ func runInspect(ctx context.Context, dockerCli command.Cli, opts inspectOptions) } // Finally try a remote manifest list + logrus.WithFields(logrus.Fields{"name": namedRef}).Debug("trying remote manifest list") manifestList, err := registryClient.GetManifestList(ctx, namedRef) if err != nil { return err diff --git a/internal/registry/service.go b/internal/registry/service.go index dbb5a4d31b3e..30e81d4dfea2 100644 --- a/internal/registry/service.go +++ b/internal/registry/service.go @@ -67,7 +67,7 @@ func (s *Service) Auth(ctx context.Context, authConfig *registry.AuthConfig, use // Try next endpoint log.G(ctx).WithFields(log.Fields{ "error": err, - "endpoint": endpoint, + "endpoint": endpoint.URL, }).Infof("Error logging in to endpoint, trying next endpoint") lastErr = err continue diff --git a/internal/registryclient/client.go b/internal/registryclient/client.go index 20f0eda11d7f..bfdc90cea80f 100644 --- a/internal/registryclient/client.go +++ b/internal/registryclient/client.go @@ -161,26 +161,24 @@ func (c *client) getHTTPTransportForRepoEndpoint(ctx context.Context, repoEndpoi // GetManifest returns an ImageManifest for the reference func (c *client) GetManifest(ctx context.Context, ref reference.Named) (manifesttypes.ImageManifest, error) { var result manifesttypes.ImageManifest - fetch := func(ctx context.Context, repo distribution.Repository, ref reference.Named) (bool, error) { + err := c.iterateEndpoints(ctx, ref, func(fetchCtx context.Context, repo distribution.Repository, ref reference.Named) (bool, error) { var err error - result, err = fetchManifest(ctx, repo, ref) + logrus.WithFields(logrus.Fields{"ref": ref}).Debug("fetching manifest") + result, err = fetchManifest(fetchCtx, repo, ref) return result.Ref != nil, err - } - - err := c.iterateEndpoints(ctx, ref, fetch) + }) return result, err } // GetManifestList returns a list of ImageManifest for the reference func (c *client) GetManifestList(ctx context.Context, ref reference.Named) ([]manifesttypes.ImageManifest, error) { result := []manifesttypes.ImageManifest{} - fetch := func(ctx context.Context, repo distribution.Repository, ref reference.Named) (bool, error) { + err := c.iterateEndpoints(ctx, ref, func(ctx context.Context, repo distribution.Repository, ref reference.Named) (bool, error) { var err error + logrus.WithFields(logrus.Fields{"ref": ref}).Debug("fetching manifest list") result, err = fetchList(ctx, repo, ref) return len(result) > 0, err - } - - err := c.iterateEndpoints(ctx, ref, fetch) + }) return result, err } diff --git a/internal/registryclient/fetcher.go b/internal/registryclient/fetcher.go index cad5451f8f7f..1faa5f922247 100644 --- a/internal/registryclient/fetcher.go +++ b/internal/registryclient/fetcher.go @@ -36,9 +36,14 @@ func fetchManifest(ctx context.Context, repo distribution.Repository, ref refere case *ocischema.DeserializedManifest: return pullManifestOCISchema(ctx, ref, repo, *v) case *manifestlist.DeserializedManifestList: + mediaType, data, err := v.Payload() + if err == nil { + logrus.WithFields(logrus.Fields{"payload": string(data), "mediaType": mediaType}).Debugf("manifestlist for: %s", ref) + } return types.ImageManifest{}, fmt.Errorf("%s is a manifest list", ref) + default: + return types.ImageManifest{}, fmt.Errorf("%s is not a manifest", ref) } - return types.ImageManifest{}, fmt.Errorf("%s is not a manifest", ref) } func fetchList(ctx context.Context, repo distribution.Repository, ref reference.Named) ([]types.ImageManifest, error) { @@ -163,6 +168,7 @@ func pullManifestList(ctx context.Context, ref reference.Named, repo distributio if err != nil { return nil, err } + logrus.WithFields(logrus.Fields{"digest": manifestDescriptor.Digest}).Debug("pulling manifest") manifest, err := manSvc.Get(ctx, manifestDescriptor.Digest) if err != nil { return nil, err @@ -286,7 +292,11 @@ func allEndpoints(ctx context.Context, namedRef reference.Named, insecure bool) return nil, err } endpoints, err := registryService.Endpoints(ctx, reference.Domain(namedRef)) - logrus.Debugf("endpoints for %s: %v", namedRef, endpoints) + var epUrls []string + for _, ep := range endpoints { + epUrls = append(epUrls, ep.URL.String()) + } + logrus.WithField("endpoints", epUrls).Debugf("resolved endpoints for %s", namedRef) return endpoints, err }