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"
答案 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