【问题标题】:Docker: execute a program that requires ttyDocker:执行需要 tty 的程序
【发布时间】:2016-03-17 10:57:45
【问题描述】:

我有一个依赖于终端特性的实用程序。我想在 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?)终端仿真器,结果相同。

有什么解决办法吗?还是这是设计使然,必须替换/重写我的实用程序?

【问题讨论】:

  • 您可以在容器内发布echo $TERM 吗?
  • @user2915097:你的问题让我做了一些实验。我已经“回答”了我自己的问题。谢谢。

标签: docker tty


【解决方案1】:

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

使用上述命令登录容器后,可以正常使用screen了。

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

【讨论】:

    【解决方案2】:

    我进行了一些实验,结果如下。希望有人发现它们有用。 (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 同上

    【讨论】:

    • 而我使用的终端模拟器与此无关,
    猜你喜欢
    • 2020-08-21
    • 2019-01-16
    • 2016-01-13
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多