mirror of https://github.com/docker/cli.git
Merge pull request #5246 from vvoland/push-nodefault-pre146
push: Don't default to `DOCKER_DEFAULT_PLATFORM`, improve message
This commit is contained in:
commit
2f529a1965
|
@ -8,7 +8,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"strings"
|
||||||
|
|
||||||
"github.com/containerd/platforms"
|
"github.com/containerd/platforms"
|
||||||
"github.com/distribution/reference"
|
"github.com/distribution/reference"
|
||||||
|
@ -58,8 +58,13 @@ func NewPushCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
flags.BoolVarP(&opts.all, "all-tags", "a", false, "Push all tags of an image to the repository")
|
flags.BoolVarP(&opts.all, "all-tags", "a", false, "Push all tags of an image to the repository")
|
||||||
flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Suppress verbose output")
|
flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Suppress verbose output")
|
||||||
command.AddTrustSigningFlags(flags, &opts.untrusted, dockerCli.ContentTrustEnabled())
|
command.AddTrustSigningFlags(flags, &opts.untrusted, dockerCli.ContentTrustEnabled())
|
||||||
flags.StringVar(&opts.platform, "platform", os.Getenv("DOCKER_DEFAULT_PLATFORM"),
|
|
||||||
|
// Don't default to DOCKER_DEFAULT_PLATFORM env variable, always default to
|
||||||
|
// pushing the image as-is. This also avoids forcing the platform selection
|
||||||
|
// on older APIs which don't support it.
|
||||||
|
flags.StringVar(&opts.platform, "platform", "",
|
||||||
`Push a platform-specific manifest as a single-platform image to the registry.
|
`Push a platform-specific manifest as a single-platform image to the registry.
|
||||||
|
Image index won't be pushed, meaning that other manifests, including attestations won't be preserved.
|
||||||
'os[/arch[/variant]]': Explicit platform (eg. linux/amd64)`)
|
'os[/arch[/variant]]': Explicit platform (eg. linux/amd64)`)
|
||||||
flags.SetAnnotation("platform", "version", []string{"1.46"})
|
flags.SetAnnotation("platform", "version", []string{"1.46"})
|
||||||
|
|
||||||
|
@ -79,9 +84,9 @@ func RunPush(ctx context.Context, dockerCli command.Cli, opts pushOptions) error
|
||||||
}
|
}
|
||||||
platform = &p
|
platform = &p
|
||||||
|
|
||||||
printNote(dockerCli, `Selecting a single platform will only push one matching image manifest from a multi-platform image index.
|
printNote(dockerCli, `Using --platform pushes only the specified platform manifest of a multi-platform image index.
|
||||||
This means that any other components attached to the multi-platform image index (like Buildkit attestations) won't be pushed.
|
Other components, like attestations, will not be included.
|
||||||
If you want to only push a single platform image while preserving the attestations, please use 'docker convert\n'
|
To push the complete multi-platform image, remove the --platform flag.
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,9 +184,22 @@ func handleAux(dockerCli command.Cli) func(jm jsonmessage.JSONMessage) {
|
||||||
|
|
||||||
func printNote(dockerCli command.Cli, format string, args ...any) {
|
func printNote(dockerCli command.Cli, format string, args ...any) {
|
||||||
if dockerCli.Err().IsTerminal() {
|
if dockerCli.Err().IsTerminal() {
|
||||||
_, _ = fmt.Fprint(dockerCli.Err(), aec.WhiteF.Apply(aec.CyanB.Apply("[ NOTE ]"))+" ")
|
format = strings.ReplaceAll(format, "--platform", aec.Bold.Apply("--platform"))
|
||||||
} else {
|
}
|
||||||
_, _ = fmt.Fprint(dockerCli.Err(), "[ NOTE ] ")
|
|
||||||
|
header := " Info -> "
|
||||||
|
padding := len(header)
|
||||||
|
if dockerCli.Err().IsTerminal() {
|
||||||
|
padding = len("i Info > ")
|
||||||
|
header = aec.Bold.Apply(aec.LightCyanB.Apply(aec.BlackF.Apply("i")) + " " + aec.LightCyanF.Apply("Info → "))
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _ = fmt.Fprint(dockerCli.Err(), header)
|
||||||
|
s := fmt.Sprintf(format, args...)
|
||||||
|
for idx, line := range strings.Split(s, "\n") {
|
||||||
|
if idx > 0 {
|
||||||
|
_, _ = fmt.Fprint(dockerCli.Err(), strings.Repeat(" ", padding))
|
||||||
|
}
|
||||||
|
_, _ = fmt.Fprintln(dockerCli.Err(), aec.Italic.Apply(line))
|
||||||
}
|
}
|
||||||
_, _ = fmt.Fprintf(dockerCli.Err(), aec.Bold.Apply(format)+"\n", args...)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,10 @@ Upload an image to a registry
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:---------------------------------------------|:---------|:--------|:--------------------------------------------------------------------------------------------------------------------------------------------|
|
|:---------------------------------------------|:---------|:--------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| [`-a`](#all-tags), [`--all-tags`](#all-tags) | `bool` | | Push all tags of an image to the repository |
|
| [`-a`](#all-tags), [`--all-tags`](#all-tags) | `bool` | | Push all tags of an image to the repository |
|
||||||
| `--disable-content-trust` | `bool` | `true` | Skip image signing |
|
| `--disable-content-trust` | `bool` | `true` | Skip image signing |
|
||||||
| `--platform` | `string` | | Push a platform-specific manifest as a single-platform image to the registry.<br>'os[/arch[/variant]]': Explicit platform (eg. linux/amd64) |
|
| `--platform` | `string` | | Push a platform-specific manifest as a single-platform image to the registry.<br>Image index won't be pushed, meaning that other manifests, including attestations won't be preserved.<br>'os[/arch[/variant]]': Explicit platform (eg. linux/amd64) |
|
||||||
| `-q`, `--quiet` | `bool` | | Suppress verbose output |
|
| `-q`, `--quiet` | `bool` | | Suppress verbose output |
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,10 @@ Upload an image to a registry
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:--------------------------|:---------|:--------|:--------------------------------------------------------------------------------------------------------------------------------------------|
|
|:--------------------------|:---------|:--------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `-a`, `--all-tags` | `bool` | | Push all tags of an image to the repository |
|
| `-a`, `--all-tags` | `bool` | | Push all tags of an image to the repository |
|
||||||
| `--disable-content-trust` | `bool` | `true` | Skip image signing |
|
| `--disable-content-trust` | `bool` | `true` | Skip image signing |
|
||||||
| `--platform` | `string` | | Push a platform-specific manifest as a single-platform image to the registry.<br>'os[/arch[/variant]]': Explicit platform (eg. linux/amd64) |
|
| `--platform` | `string` | | Push a platform-specific manifest as a single-platform image to the registry.<br>Image index won't be pushed, meaning that other manifests, including attestations won't be preserved.<br>'os[/arch[/variant]]': Explicit platform (eg. linux/amd64) |
|
||||||
| `-q`, `--quiet` | `bool` | | Suppress verbose output |
|
| `-q`, `--quiet` | `bool` | | Suppress verbose output |
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue