docker 错误:输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上“winpty”[重复]

Posted

技术标签:

【中文标题】docker 错误:输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上“winpty”[重复]【英文标题】:docker error : the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' [duplicate] 【发布时间】:2018-07-15 08:02:13 【问题描述】:

运行后$ docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev

我收到以下错误

输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上 'winpty'

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

【问题讨论】:

我正在使用 MobaXterm 并遇到同样的问题。只需将 shell 选项更改为 cmd 或 powershell 也可以解决问题。 是的,当我在 Windows 上从 git-bash 切换到 power-shell 时,它就像魅力一样工作谢谢 使用简单的这个“winpty docker exec -it c440b946173d redis-cli” 【参考方案1】:

根据您获得的错误消息的建议,您应该尝试使用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

【讨论】:

您创建别名的建议非常有效 - 非常感谢。 Cygwin:不是开箱即用的,但是 repo 的 git 克隆和标准 ./configure && make && make install 也可以在那里使用 这可行,但会破坏管道,请查看下面的@cesarpino 答案。 黄金!很好的答案 效果不错【参考方案2】:

如果你使用 Git Bash,你可以这样尝试

winpty docker run -it ubuntu

【讨论】:

【参考方案3】:

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

【讨论】:

可以补充说明为什么吗? 这是我在使用 powershell $ docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev C:\Program Files\Docker Toolbox\docker.exe: error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.35/containers/create: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running. See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.后遇到的错误 您需要通过命令docker-machine env default 设置环境变量来将shell 连接到docker 守护进程。您还可以使用连接到 docker 守护进程的 Docker 快速启动终端。 Powershell 解决了我的问题【参考方案4】:

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

winpty docker-compose exec app ls -l

【讨论】:

winpty docker exec -it docker-postgres-1 bash【参考方案5】:

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

【讨论】:

好的,但这并不能解决问题,它只是避免它:)【参考方案6】:

不要使用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。此脚本仅在使用-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 变为 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”语句中......但它对我的使用起到了作用。

【讨论】:

赞成提到管道问题。仅检查 arg -it-ti(任何地方)对于大多数交互式使用来说可能就足够了,但检查 stdout 是否是 tty([ -t 1 ])会更干净。【参考方案7】:

您是否启动了“Docker 快速入门终端”?我正在尝试运行

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

在来自 Cygwin bash shell 的 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”的东西。您需要首先从任务栏上的那个愚蠢的窗口“在此处键入以进行搜索”开始:

这会启动这个……

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

【讨论】:

【参考方案8】:

问题出在 gitbash 但是使用 powershell 它工作正常..

【讨论】:

目前尚不清楚这是否是一个答案,如果是,是什么。【参考方案9】:

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

【讨论】:

【参考方案10】:

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

所以只需在前面加上 winpty winpty docker-compose exec workspace bash

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

对于那些使用 WSL 并在 cmder 或 conemu 中为 windows 运行 Docker 的人,我建议不要使用安装在“程序文件”中的 windows 上的 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 容器

【讨论】:

还记得从 WSL 中删除 windows docker 的任何别名。您可以通过运行which docker 查看将执行的 docker【参考方案13】:

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

【讨论】:

【参考方案14】:

除了上述解决方案。 如果您收到 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 应该可以工作。

示例winpty docker attach alpine1

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

    尝试从 docker 终端运行命令。 (给你特权)。

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

发件人:

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

收件人:

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

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

【讨论】:

【参考方案17】:

如果您使用的是 gitbash,问题是在设置终端模拟器以与 Git bash 一起使用时。setting the emurator

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

【讨论】:

以上是关于docker 错误:输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上“winpty”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose exec python 输入设备不是 AWS EC2 UserData 中的 TTY

错误“输入设备不是 TTY”

docker exec -it 返回“无法在非 tty 输入上启用 tty 模式”

Composer 安装错误 - 输出不是 tty,输入不是 tty

对分配伪 TTY 的 Docker -t 选项感到困惑

将数据传输到需要 TTY(终端)的 Linux 程序