Docker:执行一个需要tty的程序
我有一个取决于terminal特性的实用程序。 我想在Docker容器中执行它。 (这个程序本身不是一个交互式的程序,它是一个老的程序,是这样写的)。
docker run -i -t
或者docker exec -i -t
应该打开一个tty到容器中。 但是,这是发生了什么..
user@1755e1f3f735:~/region/primer/cobol_v> kickstop [Error] Unable to run without terminal device (tty) user@1755e1f3f735:~/region/primer/cobol_v> tty not a tty
当docker命令(run / exec)的-t选项应该给出'tty'时,tty命令返回'not a tty'。 这是令人费解的。
我在openSuse和fedora23主机和映像上遇到过这个问题。 我使用了'guake',MATE(Gnome?)terminal仿真器,结果相同。
有没有解决这个问题? 或者这是由devise,必须更换/重写我的工具?
我遇到了同样的问题,并发现“dockerexec -ti容器脚本/ dev / null”解决了这个问题。
用上面的命令login容器后,我可以正常使用屏幕。
参考: https : //github.com/docker/docker/issues/8755
我跑了一些实验,这里是调查结果。 希望有人认为他们有用。 (docker命令不完整,只是简单的)
1. docker run -i -t > tty /dev/console > echo $TERM xterm >kickstop works!!
2. docker -d
后面跟着docker exec -i -t
>tty not a tty >echo $TERM dumb >kickstop [Error] Unable to run without terminal device (tty)
3. docker -d
后面跟着docker attach
你挂接到/ dev / console。 没有提示(因为我正在运行尾-f xxx.log保持容器活着)。 事实上,我需要停止从另一个terminal(使用docker exec)我的应用程序,并停止容器回到提示(主机shell)
4. docker start
跟4. docker start
跟上面一样