diff --git a/commands.go b/commands.go index 4e3becb782..b3b1a57199 100644 --- a/commands.go +++ b/commands.go @@ -280,47 +280,66 @@ func (cli *DockerCli) CmdLogin(args ...string) error { return readStringOnRawTerminal(stdin, stdout, false) } - oldState, err := term.SetRawTerminal(cli.terminalFd) + cmd := Subcmd("login", "[OPTIONS]", "Register or Login to the docker registry server") + flUsername := cmd.String("u", "", "username") + flPassword := cmd.String("p", "", "password") + flEmail := cmd.String("e", "", "email") + err := cmd.Parse(args) if err != nil { - return err - } - defer term.RestoreTerminal(cli.terminalFd, oldState) - - cmd := Subcmd("login", "", "Register or Login to the docker registry server") - if err := cmd.Parse(args); err != nil { return nil } + var oldState *term.State + if *flUsername == "" || *flPassword == "" || *flEmail == "" { + oldState, err = term.SetRawTerminal(cli.terminalFd) + if err != nil { + return err + } + defer term.RestoreTerminal(cli.terminalFd, oldState) + } + var ( username string password string email string ) - fmt.Fprintf(cli.out, "Username (%s):", cli.authConfig.Username) - username = readAndEchoString(cli.in, cli.out) - if username == "" { - username = cli.authConfig.Username + if *flUsername == "" { + fmt.Fprintf(cli.out, "Username (%s): ", cli.authConfig.Username) + username = readAndEchoString(cli.in, cli.out) + if username == "" { + username = cli.authConfig.Username + } + } else { + username = *flUsername } if username != cli.authConfig.Username { - fmt.Fprintf(cli.out, "Password: ") - password = readString(cli.in, cli.out) - - if password == "" { - return fmt.Errorf("Error : Password Required") + if *flPassword == "" { + fmt.Fprintf(cli.out, "Password: ") + password = readString(cli.in, cli.out) + if password == "" { + return fmt.Errorf("Error : Password Required") + } + } else { + password = *flPassword } - fmt.Fprintf(cli.out, "Email (%s): ", cli.authConfig.Email) - email = readAndEchoString(cli.in, cli.out) - if email == "" { - email = cli.authConfig.Email + if *flEmail == "" { + fmt.Fprintf(cli.out, "Email (%s): ", cli.authConfig.Email) + email = readAndEchoString(cli.in, cli.out) + if email == "" { + email = cli.authConfig.Email + } + } else { + email = *flEmail } } else { password = cli.authConfig.Password email = cli.authConfig.Email } - term.RestoreTerminal(cli.terminalFd, oldState) - + if oldState != nil { + term.RestoreTerminal(cli.terminalFd, oldState) + } cli.authConfig.Username = username cli.authConfig.Password = password cli.authConfig.Email = email diff --git a/docs/sources/commandline/command/login.rst b/docs/sources/commandline/command/login.rst index bab4fa34e3..57ecaeb00e 100644 --- a/docs/sources/commandline/command/login.rst +++ b/docs/sources/commandline/command/login.rst @@ -8,6 +8,10 @@ :: - Usage: docker login + Usage: docker login [OPTIONS] Register or Login to the docker registry server + + -e="": email + -p="": password + -u="": username