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