运行 -i 与运行 -it?

运行 -i 与运行 -it?

我在 Windows 上使用 boot2docker。我尝试了以下命令

  docker run -i centos /bin/bash

  docker run -it centos /bin/bash

两者都提供相同类型的执行。我读到 -i 是交互模式。 -t 是终端模式。但我可以在 -i 和 -it 中执行类似pwd和 的命令。ls只是生成的 UI 不同。

那么这两个flag有什么用呢?我错过了什么吗?

答案1

docker -i给你一个非交互式外壳(-i意味着交互的适用于 docker,不适用于其中的 bash)。

您可以通过运行以下命令来检查这一点(如果 bash 是交互式的,则变量$-包括i):

echo $- |grep i && echo i am interactive || echo i am non-interactive

这种非交互式 bash 不显示命令提示符,很难确定长时间运行的命令何时完成其工作,您无法使用命令历史记录,并且基于 tty 的程序看起来一团糟。

尝试vim(抱怨Output/Input is not a terminal,看起来和行为怪异)或一些rogue类似的游戏(例如,crawl只是拒绝工作)。

另一方面,docker -it提供了一个带有命令提示符(您可以通过 调整$PS1)和命令历史记录(包括Ctrl-r)的普通交互式 shell。当命令完成时,由于提示而清晰可见,并且需要 tty 的程序可以正常工作。

因此,如果您要在 shell 中手动键入命令,请使用docker -it.

相关内容