首页 > 解决方案 > 为什么要使用 -t 运行 Docker 容器?

问题描述

Docker Run Reference 说运行一个容器-t

-t : 分配一个伪 tty

但只有运行它才-i允许用户通过终端与容器化进程进行交互。所以我想知道,“分配伪 tty”是什么意思,因为即使在没有运行的情况下-t,进程写入STDOUT的内容也会传递到终端(进程将有一个管道作为标准输出而不是 tty)?

我读了这个答案,上面说您可能会运行docker run -t“终端支持”,例如文本着色等。好吧,我已经完成了以下实验:

// Dockerfile

FROM ubuntu:latest

CMD ["echo", "-e", "\u001b[31mHello World"]

并在没有-t. 因为我是从终端运行它(docker run总是从某个终端运行,不是吗?)我可以看到一个红色的“Hello World”。所以我还是不明白为什么要-t一个人跑...

标签: dockerterminal

解决方案


您的测试表明颜色代码仍然有效,但缺少的是没有-t很多程序将停止尝试发送它们。

许多程序签isatty(3)入 C 或[ -t 0 ]shell 脚本以查看它们是否连接到 TTY。如果是这样,他们将启用颜色和线条编辑等交互式功能,以使体验更加愉快。

你可以通过像 Bash 这样的 shell 和像 Vim 这样的文本编辑器来见证这一点。ls、grep 和 git 之类的程序具有“自动”颜色模式,它们仅以交互方式使用 ANSI 颜色代码。如果您忽略-t它们,它们将恢复为纯文本。


推荐阅读