Docker:执行一个需要tty

时间:2016-03-17 10:57:45

标签: docker tty

我有一个取决于终端特征的实用程序。我想在docker容器中执行它。 (该程序不是一个交互式程序。这是一个以这种方式编写的旧程序。)

docker run -i -tdocker 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?)终端模拟器,结果相同。

这有什么解决方案吗?或者这是设计并且必须替换/重写我的实用程序?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,发现“docker exec -ti容器脚本/ dev / null”解决了这个问题。

使用上述命令登录容器后,我可以正常使用屏幕。

参考:https://github.com/docker/docker/issues/8755

答案 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 与上述相同