窗口上的 docker 错误: 输入设备不是 TTY。如果您正在使用 minty,请尝试在命令前面加上“ winpty”

等我查完这个
$ docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev

我得到以下错误

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

我应该在这里使用什么? 我运行在 Windows 8在 MINGW64的 Docker。

143210 次浏览

当在窗口上使用 bash 终端运行 -it选项时,会出现此问题。你可以利用 Powershell 来解决这个问题。

从命令中删除 -it。如果你想保持它的交互性,那么保持 -i

正如您所获得的错误消息所建议的那样,您应该尝试使用 小气鬼(默认情况下使用 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

可能是您没有在 Docker 终端中运行命令。如果不这样做,则可能无法正确连接到 Docker 守护进程,并且无法正确交互。

确保在实际的 Docker 终端中运行命令。

- 你是不是启动了“ Docker 快速启动终端”?-我本来想跑的

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

在 Cygwin bash shell 的窗口上,得到了同样的错误:

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

然后我想起来,当我在我的 windows 10系统上安装了一个叫做“ Docker 快速启动终端”的东西。你首先需要从任务栏上那个傻乎乎的“键入这里搜索”窗口开始:

enter image description here

发射这个..。

enter image description here

... 你可以在那里运行你的 Docker 命令,而不会出现错误或运行 winpty。

你可以尝试用 Cmder 工具它会工作。它不工作与 Gitbash

除上述解决方案外。 如果你得到这个错误的码头附加

示例 : 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 附加应该可以工作。

example: winpty docker attach alpine1

注意: 我在使用 base on windows 时得到了这个错误,这个解决方案对我很有效。

对于那些使用 WSL 并在 cmder 或 conemu 中的窗口中运行 Docker 的用户,我建议不要使用安装在“ 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 容器

如果您正在使用 Git Bash,您可以尝试这样做

winpty docker run -it ubuntu

只需在 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/

运行 docker-compose exec workspace bash时出现这个错误

所以只要前缀 Winpty winpty docker-compose exec workspace bash

如果你正在使用 gitbash,那么问题就出在设置虚拟终端以便与 gitbash.设置模拟器一起使用时

Instead you can change the emulator to the first options or use the
运行命令之前的 winpty 命令

问题在于 gitbash,但是 Powershell 运行得很好。

不要使用 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

这个脚本只有在使用 -ti的情况下才使用 winpty docker

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

docker run -ti ubuntu becomes winpty docker run -ti ubuntu avoids 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’句子中... ... 但它为我的使用提供了技巧。

在尝试运行 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.

这对我有用。 我在窗口上使用 git bash

winpty docker-compose exec app ls -l

发生在我身上。从 Git Bash,在 Windows 8上运行 Docker Toolbox。发生了两件事。从 git bash 来看,我们似乎没有对 docker 守护进程的完全升级特权(即使我使用管理特权运行 git bash)。 因此:

  1. 尝试从您的 Docker 终端运行该命令。

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

来自:

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

致:

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

(请注意后者在 $(pwd):/data附近的引号)。