mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
`GET /image/{name}/json` now supports `platform` parameter allowing to
specify which platform variant of a multi-platform image to inspect.
For servers that do not use containerd image store integration, this
option will cause an error if the requested platform doesn't match the
image's actual platform
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package client // import "github.com/docker/docker/client"
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/url"
|
|
|
|
"github.com/docker/docker/api/types/image"
|
|
)
|
|
|
|
// ImageInspect returns the image information.
|
|
func (cli *Client) ImageInspect(ctx context.Context, imageID string, inspectOpts ...ImageInspectOption) (image.InspectResponse, error) {
|
|
if imageID == "" {
|
|
return image.InspectResponse{}, objectNotFoundError{object: "image", id: imageID}
|
|
}
|
|
|
|
var opts imageInspectOpts
|
|
for _, opt := range inspectOpts {
|
|
if err := opt.Apply(&opts); err != nil {
|
|
return image.InspectResponse{}, fmt.Errorf("error applying image inspect option: %w", err)
|
|
}
|
|
}
|
|
|
|
query := url.Values{}
|
|
if opts.apiOptions.Manifests {
|
|
if err := cli.NewVersionError(ctx, "1.48", "manifests"); err != nil {
|
|
return image.InspectResponse{}, err
|
|
}
|
|
query.Set("manifests", "1")
|
|
}
|
|
|
|
if opts.apiOptions.Platform != nil {
|
|
if err := cli.NewVersionError(ctx, "1.49", "platform"); err != nil {
|
|
return image.InspectResponse{}, err
|
|
}
|
|
platform, err := encodePlatform(opts.apiOptions.Platform)
|
|
if err != nil {
|
|
return image.InspectResponse{}, err
|
|
}
|
|
query.Set("platform", platform)
|
|
}
|
|
|
|
resp, err := cli.get(ctx, "/images/"+imageID+"/json", query, nil)
|
|
defer ensureReaderClosed(resp)
|
|
if err != nil {
|
|
return image.InspectResponse{}, err
|
|
}
|
|
|
|
buf := opts.raw
|
|
if buf == nil {
|
|
buf = &bytes.Buffer{}
|
|
}
|
|
|
|
if _, err := io.Copy(buf, resp.Body); err != nil {
|
|
return image.InspectResponse{}, err
|
|
}
|
|
|
|
var response image.InspectResponse
|
|
err = json.Unmarshal(buf.Bytes(), &response)
|
|
return response, err
|
|
}
|
|
|
|
// ImageInspectWithRaw returns the image information and its raw representation.
|
|
//
|
|
// Deprecated: Use [Client.ImageInspect] instead. Raw response can be obtained using the [ImageInspectWithRawResponse] option.
|
|
func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (image.InspectResponse, []byte, error) {
|
|
var buf bytes.Buffer
|
|
resp, err := cli.ImageInspect(ctx, imageID, ImageInspectWithRawResponse(&buf))
|
|
if err != nil {
|
|
return image.InspectResponse{}, nil, err
|
|
}
|
|
return resp, buf.Bytes(), err
|
|
}
|