Docker - 独立和互动?

Chr*_*ter 12 docker

在阅读不同的书籍,文章和论坛帖子时,我经常看到以下Docker Run命令:

docker run -tid <dockerimage>
Run Code Online (Sandbox Code Playgroud)

我真的不明白:用伪tty(-t)启动一个分离的(-d)Container interactive(-i)是否有意义?

我的意思是一个分离的Container永远不会提示你进入控制台,所以我认为没有必要用-it调用它.

Ana*_*and 12

当您使用-d选项运行映像时,容器将在执行命令后立即退出.如果使用-itd选项运行,容器将被分离但在后台运行,您可以在需要时附加回来.请参阅附带的屏幕截图以获得更清晰

在此输入图像描述

  • 我在这个答案中错过的重要一点是容器在第一种情况下立即存在的原因,带有“-d”选项(在@Joshua Chia的答案中得到了很好的解释):容器存在是因为 /bin/bash 退出。/bin/bash 退出,因为 stdin 不再打开。在第二种情况下,使用“-itd”选项,docker 使 bash 的标准输入保持打开状态,以便您再次附加。 (4认同)

Syn*_*ted 8

-i(交互式)是关于是否保持标准输入打开(某些程序,例如bash,使用标准输入而其他程序则不开放)。-d(分离)与docker run命令是否等待正在运行的进程退出有关。因此,它们是正交的,并不是天生矛盾的。诸如bash之类的程序在stdin关闭时退出,因此-i,如果没有,它将立即退出。

-t分配一个伪tty。您可以看到-it使用just 与vs 运行bash的区别-i。例如,如果不使用-t,则不会得到任何提示,也不会ls在一列中显示结果。这种差异就像running ls和running 之间的差异一样ls | cat,其中cat没有伪tty。

当您将docker runbash放入容器中时,-it-itd行为如下所示:

  • 使用-itdocker run可立即显示bash提示。
  • 使用-itd,会docker run立即退出,但是您可以docker attach在那之后获得bash提示,就好像您刚刚完成操作一样docker run -it

  • 应该是公认的答案。感谢您澄清 -i 的作用以及当入口点可执行文件存在时容器将存在的事实以及 bash、sh 等如何运行。 (2认同)