diff --git a/cli/command/registry.go b/cli/command/registry.go index 9099367225..95c16d7dc5 100644 --- a/cli/command/registry.go +++ b/cli/command/registry.go @@ -10,6 +10,7 @@ import ( "strings" configtypes "github.com/docker/cli/cli/config/types" + "github.com/docker/cli/cli/hints" "github.com/docker/cli/cli/streams" "github.com/docker/distribution/reference" "github.com/docker/docker/api/types" @@ -19,6 +20,10 @@ import ( "github.com/pkg/errors" ) +const patSuggest = "You can log in with your password or a Personal Access " + + "Token (PAT). Using a limited-scope PAT grants better security and is required " + + "for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/" + // EncodeAuthToBase64 serializes the auth configuration as JSON base64 payload. // // Deprecated: use [registrytypes.EncodeAuthConfig] instead. @@ -113,7 +118,11 @@ func ConfigureAuth(cli Cli, flUser, flPassword string, authconfig *registrytypes if flUser = strings.TrimSpace(flUser); flUser == "" { if isDefaultRegistry { // if this is a default registry (docker hub), then display the following message. - fmt.Fprintln(cli.Out(), "Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.") + fmt.Fprintln(cli.Out(), "Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.") + if hints.Enabled() { + fmt.Fprintln(cli.Out(), patSuggest) + fmt.Fprintln(cli.Out()) + } } promptWithDefault(cli.Out(), "Username", authconfig.Username) var err error diff --git a/cli/hints/hints.go b/cli/hints/hints.go new file mode 100644 index 0000000000..f99df8fda0 --- /dev/null +++ b/cli/hints/hints.go @@ -0,0 +1,18 @@ +package hints + +import ( + "os" + "strconv" +) + +// Enabled returns whether cli hints are enabled or not +func Enabled() bool { + if v := os.Getenv("DOCKER_CLI_HINTS"); v != "" { + enabled, err := strconv.ParseBool(v) + if err != nil { + return true + } + return enabled + } + return true +}