Docker - 独立和互动?

时间:2017-12-11 12:31:55

标签: docker

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

docker run -tid <dockerimage>

我真的不明白:用伪tty <启动分离的( - d)容器交互式( - i)是否有意义? / em>(-t)?

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

3 个答案:

答案 0 :(得分:8)

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

enter image description here

答案 1 :(得分:3)

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

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

当您docker run在容器中进行重击时,-it-itd的行为如下:

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

答案 2 :(得分:0)

我认为通常启动这样的分离式交互式容器是一个不寻常的用例。在我日常使用的码头工具中,这绝对不是最终的用途。

某些应用程序在stdout与tty相关时可能会有不同的行为与不相关时(例如,当它们的输出是终端时,它们可能只会默认登录到stdout,或者如果你运行的是shell,它可能只是退出当没有与终端相关联时)。

您可能希望docker attach到正在运行的容器。如果你已经启动了某种独立的shell,这一点尤其重要。