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

时间:2015-03-31 23:34:50

标签: centos docker

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

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

我在centos box 6.6上运行docker(1.4.1)。 我正在尝试执行以下命令 docker exec -it containerName /bin/bash 但我收到了以下错误

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

8 个答案:

答案 0 :(得分:81)

正在运行docker exec -i而不是docker exec -it解决了我的问题。实际上,我的脚本是由CRONTAB发起的,它不是终端。

提醒一下:

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

答案 1 :(得分:14)

如果您在 Windows docker客户端中收到此错误,则可能需要使用以下运行命令

$ winpty docker run -it ubuntu /bin/bash

答案 2 :(得分:9)

只需使用“-i”

  

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

答案 3 :(得分:7)

如果你在Windows上使用docker-machine而你正在使用GIT Bash或Cygwin,要“进入”正在运行的容器,你需要执行以下操作:

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

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

编辑:

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

答案 4 :(得分:5)

我得到&#34;无法在非tty输入上启用tty模式&#34;对于带有boot2docker的Windows上的以下命令

docker exec -it <containerIdOrName> bash

下面的命令解决了问题

winpty docker exec -it <containerIdOrName> bash

答案 5 :(得分:4)

docker exec运行新命令in an already-running container。这不是启动新容器的方法 - 请使用docker run

这可能是&t;非tty输入的原因&#34;错误。或者它可能是您运行docker的地方。这是真正的终端吗?那是一个完整的tty会话吗?您可能想要检查您是否正在与

进行交互式会话
[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'

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

答案 6 :(得分:3)

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

我尝试将上面的命令加上winpty作为其他答案的建议,但是运行它会在下面显示另一条错误消息: $ 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:/#

答案 7 :(得分:0)

我在jenkins作业下运行docker exec -it并且收到错误'无法在非tty输入上启用tty模式'。没有返回到docker exec命令的输出。我的工作登录顺序是:

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

我更改了在jenkins的初始ssh中使用-T标志。 “-T - 禁用伪终端分配”。并使用-i标志与docker exec而不是-it。 “-i - interactive.-t - allocate pseudo tty。”这似乎解决了我的问题。

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

行为种类匹配此docker exec tty bug:https://github.com/docker/docker/issues/8755。有关docker bug讨论的解决方法建议使用:

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

使用该解决方法并没有解决我的问题。虽然很有意思。尝试使用不同的标志并在不同的ssh调用下,即使使用-t with docker exec,你也可以看到'not a 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