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

docker exec -it命令返回以下错误“无法在非ttyinput上启用tty模式”

 level="fatal" msg="cannot enable tty mode on non tty input" 

我正在运行docker(1.4.1)在6.6盒子上。 我想执行以下命令docker exec -it containerName /bin/bash但我得到以下错误

 level="fatal" msg="cannot enable tty mode on non tty input" 

运行docker exec -i而不是docker exec -it修复了我的问题。 事实上,我的脚本是由CRONTAB发起的,而不是terminal。

提醒一句:

 Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container -i, --interactive=false Keep STDIN open even if not attached -t, --tty=false Allocate a pseudo-TTY 

如果你在windows docker客户端出现这个错误,那么你可能需要使用下面的run命令

$ winpty docker run -it ubuntu /bin/bash

只用“-i”

docker exec -i [your-ps] [command]

如果你在Windows上,使用docker-machine,并且使用Git Bash或者Cygwin,为了“进入”一个正在运行的容器,你需要执行以下操作:

docker-machine ssh default为ssh进入虚拟机(Virtualbox最有可能)

docker exec -it <container> bash进入容器。

编辑:

我最近发现,如果你使用Windows PowerShell,你可以将winpty docker exec -it <container> bash exec直接插入到容器中,使用Cygwin或者Git Bash,你可以使用winpty docker exec -it <container> bash并跳过上面的winpty docker exec -it <container> bash docker-machine ssh步骤。

在boot2docker的窗口中,我得到“无法在非ttyinput上启用tty模式”

 docker exec -it <containerIdOrName> bash 

下面的命令解决了问题

 winpty docker exec -it <containerIdOrName> bash 

docker exec 在已经运行的容器中运行一个新的命令。 这不是开始一个新的容器的方式 – 使用docker run

这可能是“非ttyinput”错误的原因。 或者它可能是你运行docker的地方。 这是一个真正的terminal吗? 那是一个完整的tty会议吗? 您可能想要检查您是否正在与交互式会话

 [[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive' 

https://unix.stackexchange.com/questions/26676/how-to-check-if-a-shell-is-login-interactive-batch

我在Windows 7 64位使用Mintty附带的Git for Windows遇到了同样的错误信息。 $docker run -i -t ubuntu /bin/bash cannot enable tty mode on non tty input

我尝试使用winpty作为前缀的上面的命令作为其他答案build议,但运行它显示了我下面的另一个错误消息: $ winpty docker run -i -t ubuntu /bin/bash exec: "D:\\Git\\usr\\bin\\bash": executable file not found in $PATH docker: Error response from daemon: Container command not found or does not exist..

然后,我碰巧运行以下命令,给了我我想要的: $ winpty docker run -i -t ubuntu bash root@512997713d49:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@512997713d49:/#

我正在运行docker exec -it在jenkins作业下,并得到错误“无法在非ttyinput启用tty模式”。 没有输出到docker exec命令被返回。 我的工作login顺序是:

 jenkins shell -> ssh user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -it <container> 

我做了一个修改,在jenkins的初始ssh中使用-T标志。 “-T – 禁用伪terminal分配”。 并使用docker exec而不是-i标志。 “-i – interactive。-t – 分配伪tty”。 这似乎解决了我的问题。

 jenkins shell -> ssh -T user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -i <container> 

行为kindof匹配这个docker exec tty bug: https : //github.com/docker/docker/issues/8755 。 在docker bug讨论上的解决方法build议使用这个:

 docker exec -it <CONTAINER> script -qc <COMMAND> 

使用该解决方法不能解决我的问题。 这很有趣。 尝试这些使用不同的标志,并在不同的ssh调用下,即使使用docker exec使用-t,也可以看到“不是tty”

 $ docker exec -it <CONTAINER> script -qc 'tty' /dev/pts/0 $ docker exec -it <CONTAINER> 'tty' not a tty $ docker exec -it <CONTAINER> bash -c 'tty' not a tty 
Interesting Posts