我有一个取决于终端特征的实用程序。我想在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?)终端模拟器,结果相同。
这有什么解决方案吗?或者这是设计并且必须替换/重写我的实用程序?
答案 0 :(得分:1)
我遇到了同样的问题,发现“docker exec -ti容器脚本/ dev / null”解决了这个问题。
使用上述命令登录容器后,我可以正常使用屏幕。
答案 1 :(得分:0)
我做了一些实验,这是调查结果。希望有人发现它们有用。 (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的附件。没有提示(因为我正在运行tail -f xxx.log以保持容器处于活动状态)。实际上我需要从另一个终端(使用docker exec)停止我的应用程序并停止容器以返回提示符(主机shell)
4. docker start
后跟docker attach
与上述相同