docker error : the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'

时间:2018-02-05 12:49:55

标签: git docker github tty

After i run this
$ docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev

I am getting the following error the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' What should i use here i am running on windows 8 in MINGW64.

17 个答案:

答案 0 :(得分:25)

根据您获得的错误消息的建议,您应该尝试使用winpty(默认情况下使用Git-Bash安装),然后运行:

winpty docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev

如果这样做,您可能需要设置Bash别名以避免一直手动前置winpty

echo "alias docker='winpty docker'" >> ~/.bashrc

echo "alias docker='winpty docker'" >> ~/.bash_profile

答案 1 :(得分:5)

在Windows上使用bash终端运行-it选项时会出现此问题。您可以使用Powershell解决此问题。

答案 2 :(得分:4)

您是否启动了“ Docker Quickstart Terminal”?我正在尝试

$ docker run -i -t redcricket/react-tutorial:latest /bin/bash

在Cygwin bash外壳的Windows上出现相同的错误:

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

然后,我记得在Windows 10系统上安装docker时安装了一个名为“ Docker Quickstart Terminal”的东西。您需要首先从任务栏上的“输入此处以搜索”这个愚蠢的窗口开始:

enter image description here

这启动了这个……

enter image description here

…您可以在其中运行docker命令而不会出现该错误或运行winpty。

答案 3 :(得分:3)

这对我有用。 我在Windows上使用git bash

winpty docker-compose exec app ls -l

答案 4 :(得分:3)

如果您使用的是Git Bash,可以尝试这样

winpty docker run -it ubuntu

答案 5 :(得分:2)

请勿使用alias docker="winpty docker"。它可以解决您的问题,但会中断管道。

$ winpty docker run -ti ubuntu
root@e85cff7d1670:/# exit

$ wintpy docker run ubuntu bash HELLO 
HELLO

$ wintpy docker run ubuntu bash HELLO | cat
stdout is not a tty

将此复制到您的.bashrc。仅当使用winpty docker时,此脚本才使用-ti

function docker(){
  for param; do if [[ "$param" == "-ti" ]] || [[ "$param" == "-it" ]]; then 
    winpty docker "$@"; return
  fi; done; 
  command docker "$@"
}

docker run -ti ubuntu变成winpty docker run -ti ubuntu避免了error: the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'"

docker run ubuntu echo "what's up" | cat变成command docker run echo "what'up" | cat避免了error: stdout is not a tty

该脚本仅查看是否有一个'-it'参数,而不检查它是否在'docker run'语句中...但是它可以解决我的问题。

答案 6 :(得分:1)

从命令中删除-it。如果您想保持互动,请保留-i

答案 7 :(得分:1)

只需在cmd开头添加“ winpty”,请尝试以下操作:

$ winpty docker.exe run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev

为什么会这样?此处有更多详细信息: http://willi.am/blog/2016/08/08/docker-for-windows-interactive-sessions-in-mintty-git-bash/

答案 8 :(得分:0)

对于那些使用WSL并在cmder或conmumu内部的Windows上运行Docker的人,我建议不要使用Windows上“ Program Files”中安装的Docker,而应在ubuntu / linux的WSL中​​安装Docker。请记住,尽管您不能在WSL中运行Docker本身,但必须从WSL中安装的Linux Docker客户端连接到Windows上运行的Docker。

要在WSL上安装Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce

您可以使用以下命令来运行实际的Docker命令: 使用-H

开关连接到Docker

docker -H localhost:2375 run -it -v /mnt/c/code:/var/app -w "/var/app" centos:7

或设置环境变量docker_host

export DOCKER_HOST=tcp://localhost:2375

无论哪种方式,您现在都可以以交互方式连接到正在运行的Docker容器

答案 9 :(得分:0)

除了上述解决方案。 如果您收到有关docker attach的错误

示例docker attach alpine1

错误the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'

解决方案:在docker命令之前添加winpty应该可以工作。

示例winpty docker attach alpine1

注意::在Windows上使用时遇到此错误,此解决方案对我有用。

答案 10 :(得分:0)

由于运行docker-compose exec workspace bash

而获得此错误

因此只需在winpty winpty docker-compose exec workspace bash前面加上

答案 11 :(得分:0)

问题出在gitbash上,但是使用powershell可以正常工作..

答案 12 :(得分:0)

您可以尝试使用Cmder工具,它将起作用。它不适用于Gitbash

答案 13 :(得分:0)

尝试运行docker-compose exec命令时,我遇到了相同的错误。 在帮助文档docker-compose exec --help中,它显示了如何通过以下方式将-T添加到命令选项中来禁用伪tty分配:

docker-compose exec -T

来自帮助文档:

-T Disable pseudo-tty allocation. By default docker-compose exec allocates a TTY.

答案 14 :(得分:0)

可能是您没有在Docker终端中运行命令。否则,您可能无法正确连接到Docker守护程序,并且将无法正确交互。

确保您在实际的Docker Terminal中运行命令。

答案 15 :(得分:0)

发生在我身上。在Windows 8上从Git Bash运行Docker Toolbox。有两件事正在发生。从git bash看来,我们似乎没有对docker daemon的完整升级权限(即使我以管理权限运行git bash)。 因此:

  1. 尝试从docker终端运行命令。 (赋予您特权)。

  2. 要补偿Window文件夹命名格式中的错误,请不要忘记引用路径。(以转义空格和/或大写错误表示)

发件人:

docker run -v $(pwd):/data image_ref

收件人:

docker run -v "$(pwd):/data" image_ref

(请注意$(pwd):/data后面的引号)。

答案 16 :(得分:-1)

如果您使用的是gitbash,则问题在于将终端仿真器设置为与Git bash一起使用。setting the emurator

相反,您可以将仿真器更改为第一个选项或使用
在docker run命令之前使用winpty命令