这是一个有效的命令:
$echo 'hi there' | docker run -i ubuntu cat hi there
这是一个响应错误消息的命令:
$echo 'hi there' | docker run -it ubuntu cat the input device is not a TTY
我想弄清楚到底发生了什么.不只是“删除-t,它将被修复”.
我知道docker run的-t选项代表“Allocate a pseudo-TTY”,我已经阅读了historical overviews of what TTY stands for,但它并没有帮助我理解这里违反了什么类型的合同.
解决方法
tty表示你有一个终端,可以由xterm或许多linux命令行界面之一提供.它需要一个与之关联的键盘和文本输出接口.想要这个的典型原因是支持彩色文本输出,处理各种键组合(如箭头键),以及在屏幕上移动光标的能力.
当您将命令管道输入docker时,就像echo示例所示,该管道是输入,并且该管道没有tty接口,它只是一个文本流.尝试使用该tty创建tty将失败,因为错误消息指示.