在阅读不同的书籍,文章和论坛帖子时,我经常看到以下Docker Run命令:
docker run -tid <dockerimage>
我真的不明白:用伪tty <启动分离的( - d)容器交互式( - i)是否有意义? / em>(-t)?
我的意思是一个分离的Container永远不会提示你进入控制台,所以我认为没必要用-it调用它。
答案 0 :(得分:8)
答案 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
的行为如下:
-it
,docker run
会立即显示bash提示。-itd
中,docker run
立即退出,但是您可以在此之后docker attach
并获得bash提示,就像您刚完成docker run -it
一样。答案 2 :(得分:0)
我认为通常启动这样的分离式交互式容器是一个不寻常的用例。在我日常使用的码头工具中,这绝对不是最终的用途。
某些应用程序在stdout与tty相关时可能会有不同的行为与不相关时(例如,当它们的输出是终端时,它们可能只会默认登录到stdout,或者如果你运行的是shell,它可能只是退出当没有与终端相关联时)。
您可能希望docker attach
到正在运行的容器。如果你已经启动了某种独立的shell,这一点尤其重要。