diff --git a/api/client/cli.go b/api/client/cli.go index 653d6b43ce..ca7000050d 100644 --- a/api/client/cli.go +++ b/api/client/cli.go @@ -67,7 +67,11 @@ func (cli *DockerCli) CheckTtyInput(attachStdin, ttyMode bool) error { // be a tty itself: redirecting or piping the client standard input is // incompatible with `docker run -t`, `docker exec -t` or `docker attach`. if ttyMode && attachStdin && !cli.isTerminalIn { - return errors.New("cannot enable tty mode on non tty input") + eText := "the input device is not a TTY" + if runtime.GOOS == "windows" { + return errors.New(eText + ". If you are using mintty, try prefixing the command with 'winpty'") + } + return errors.New(eText) } return nil } diff --git a/integration-cli/docker_cli_attach_test.go b/integration-cli/docker_cli_attach_test.go index 0ac3e1ac2b..24ec622b53 100644 --- a/integration-cli/docker_cli_attach_test.go +++ b/integration-cli/docker_cli_attach_test.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "os/exec" + "runtime" "strings" "sync" "time" @@ -103,7 +104,10 @@ func (s *DockerSuite) TestAttachTTYWithoutStdin(c *check.C) { return } - expected := "cannot enable tty mode" + expected := "the input device is not a TTY" + if runtime.GOOS == "windows" { + expected += ". If you are using mintty, try prefixing the command with 'winpty'" + } if out, _, err := runCommandWithOutput(cmd); err == nil { done <- fmt.Errorf("attach should have failed") return diff --git a/integration-cli/docker_cli_exec_test.go b/integration-cli/docker_cli_exec_test.go index a8150ad2a4..a2b7331e38 100644 --- a/integration-cli/docker_cli_exec_test.go +++ b/integration-cli/docker_cli_exec_test.go @@ -9,6 +9,7 @@ import ( "os" "os/exec" "reflect" + "runtime" "sort" "strings" "sync" @@ -182,7 +183,10 @@ func (s *DockerSuite) TestExecTTYWithoutStdin(c *check.C) { return } - expected := "cannot enable tty mode" + expected := "the input device is not a TTY" + if runtime.GOOS == "windows" { + expected += ". If you are using mintty, try prefixing the command with 'winpty'" + } if out, _, err := runCommandWithOutput(cmd); err == nil { errChan <- fmt.Errorf("exec should have failed") return diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index 1145f3bc21..17af353cae 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -12,6 +12,7 @@ import ( "path/filepath" "reflect" "regexp" + "runtime" "sort" "strconv" "strings" @@ -2642,7 +2643,10 @@ func (s *DockerSuite) TestRunTTYWithPipe(c *check.C) { return } - expected := "cannot enable tty mode" + expected := "the input device is not a TTY" + if runtime.GOOS == "windows" { + expected += ". If you are using mintty, try prefixing the command with 'winpty'" + } if out, _, err := runCommandWithOutput(cmd); err == nil { errChan <- fmt.Errorf("run should have failed") return @@ -2655,7 +2659,7 @@ func (s *DockerSuite) TestRunTTYWithPipe(c *check.C) { select { case err := <-errChan: c.Assert(err, check.IsNil) - case <-time.After(6 * time.Second): + case <-time.After(30 * time.Second): c.Fatal("container is running but should have failed") } }