我在 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
.