| package client |
| |
| import ( |
| "bytes" |
| "context" |
| "encoding/json" |
| "fmt" |
| "io" |
| "net/url" |
| ) |
| |
| // ImageInspect returns the image information. |
| func (cli *Client) ImageInspect(ctx context.Context, imageID string, inspectOpts ...ImageInspectOption) (ImageInspectResult, error) { |
| if imageID == "" { |
| return ImageInspectResult{}, objectNotFoundError{object: "image", id: imageID} |
| } |
| |
| var opts imageInspectOpts |
| for _, opt := range inspectOpts { |
| if err := opt.Apply(&opts); err != nil { |
| return ImageInspectResult{}, fmt.Errorf("error applying image inspect option: %w", err) |
| } |
| } |
| |
| query := url.Values{} |
| if opts.apiOptions.Manifests { |
| if err := cli.requiresVersion(ctx, "1.48", "manifests"); err != nil { |
| return ImageInspectResult{}, err |
| } |
| query.Set("manifests", "1") |
| } |
| |
| if opts.apiOptions.Platform != nil { |
| if err := cli.requiresVersion(ctx, "1.49", "platform"); err != nil { |
| return ImageInspectResult{}, err |
| } |
| platform, err := encodePlatform(opts.apiOptions.Platform) |
| if err != nil { |
| return ImageInspectResult{}, err |
| } |
| query.Set("platform", platform) |
| } |
| |
| resp, err := cli.get(ctx, "/images/"+imageID+"/json", query, nil) |
| defer ensureReaderClosed(resp) |
| if err != nil { |
| return ImageInspectResult{}, err |
| } |
| |
| buf := opts.raw |
| if buf == nil { |
| buf = &bytes.Buffer{} |
| } |
| |
| if _, err := io.Copy(buf, resp.Body); err != nil { |
| return ImageInspectResult{}, err |
| } |
| |
| var response ImageInspectResult |
| err = json.Unmarshal(buf.Bytes(), &response) |
| return response, err |
| } |