因此,以它为背景,运行一个没有选项的容器,默认情况下你有一个标准输出流(因此docker run | <cmd>工作);使用-i运行,你会添加stdin流(所以<cmd> | docker run -i工作);使用-t,通常在-it的组合中,并且你添加了一个终端驱动程序,如果你正在与进程交互,这可能是你想要的。它基本上使容器开始看起来像一个终端连接会话。
现在,一起为-it。这告诉cat它的输入是一个终端,同时将这个终端连接到docker run的输入,这是一个终端。docker run/exec将确保它自己的输入在传递给cat之前实际上是一个tty。这就是为什么如果你尝试echo "hello" | docker run -it alpine cat,你会得到一个input device is not a TTY,因为在这种情况下,docker run的输入本身是来自前一个回显的管道,而不是执行docker run的终端