diff --git a/cli/command/image/inspect.go b/cli/command/image/inspect.go
index ece81cae71..0624268d0d 100644
--- a/cli/command/image/inspect.go
+++ b/cli/command/image/inspect.go
@@ -7,6 +7,7 @@ import (
"bytes"
"context"
+ "github.com/containerd/platforms"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/completion"
@@ -14,12 +15,14 @@ import (
flagsHelper "github.com/docker/cli/cli/flags"
"github.com/docker/docker/api/types/image"
"github.com/docker/docker/client"
+ ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/spf13/cobra"
)
type inspectOptions struct {
- format string
- refs []string
+ format string
+ refs []string
+ platform string
}
// newInspectCommand creates a new cobra.Command for `docker image inspect`
@@ -39,14 +42,36 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command {
flags := cmd.Flags()
flags.StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp)
+
+ // Don't default to DOCKER_DEFAULT_PLATFORM env variable, always default to
+ // inspecting the image as-is. This also avoids forcing the platform selection
+ // on older APIs which don't support it.
+ flags.StringVar(&opts.platform, "platform", "", `Inspect a specific platform of the multi-platform image.
+If the image or the server is not multi-platform capable, the command will error out if the platform does not match.
+'os[/arch[/variant]]': Explicit platform (eg. linux/amd64)`)
+ flags.SetAnnotation("platform", "version", []string{"1.49"})
+
+ _ = cmd.RegisterFlagCompletionFunc("platform", completion.Platforms)
return cmd
}
func runInspect(ctx context.Context, dockerCLI command.Cli, opts inspectOptions) error {
+ var platform *ocispec.Platform
+ if opts.platform != "" {
+ p, err := platforms.Parse(opts.platform)
+ if err != nil {
+ return err
+ }
+ platform = &p
+ }
+
apiClient := dockerCLI.Client()
return inspect.Inspect(dockerCLI.Out(), opts.refs, opts.format, func(ref string) (any, []byte, error) {
var buf bytes.Buffer
- resp, err := apiClient.ImageInspect(ctx, ref, client.ImageInspectWithRawResponse(&buf))
+ resp, err := apiClient.ImageInspect(ctx, ref,
+ client.ImageInspectWithRawResponse(&buf),
+ client.ImageInspectWithPlatform(platform),
+ )
if err != nil {
return image.InspectResponse{}, nil, err
}
diff --git a/docs/reference/commandline/image_inspect.md b/docs/reference/commandline/image_inspect.md
index 1f59b0014d..74da0bee2c 100644
--- a/docs/reference/commandline/image_inspect.md
+++ b/docs/reference/commandline/image_inspect.md
@@ -8,6 +8,7 @@ Display detailed information on one or more images
| Name | Type | Default | Description |
|:-----------------|:---------|:--------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `-f`, `--format` | `string` | | Format output using a custom template:
'json': Print in JSON format
'TEMPLATE': Print output using the given Go template.
Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates |
+| `--platform` | `string` | | Inspect a specific platform of the multi-platform image.
If the image or the server is not multi-platform capable, the command will error out if the platform does not match.
'os[/arch[/variant]]': Explicit platform (eg. linux/amd64) |