【问题标题】:docker error : the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' [duplicate]docker 错误:输入设备不是 TTY。如果您使用的是 mintty,请尝试在命令前加上“winpty”[重复]
【发布时间】: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”

标签: windows bash git docker tty


【解决方案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)。 因此:

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

                  2. 为了弥补 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 命令

                    【讨论】:

                      猜你喜欢
                      • 2019-01-17
                      • 2020-07-02
                      • 1970-01-01
                      • 2017-08-23
                      • 1970-01-01
                      • 2021-12-16
                      • 2018-04-12
                      • 1970-01-01
                      相关资源
                      最近更新 更多