为什么docker运行-t让bash进程退出并停止容器

我明白,一旦主进程(命令)结束,docker容器将停止。

我也明白,-t将分配一个伪TTY

docker run -t <image> <command> 

现在,当我默认运行bash时,容器立即停止,这是预期的

 docker run fedora bash docker -ps =>(this gives empty list) 

但是当我用-t像这样运行bash的时候

 docker run -t fedora bash [CTRL+C] docker ps =>(this shows one running container) 

为什么-t保持bash进程运行? 尽pipe如此,t不会保持,例如,回声运行

 docker run -t fedora echo "hello" [CTRL+C] docker ps =>(this shows empty list although we added -t) 

当你使用bash而不使用-t它会立即退出状态0,因为你没有使用-c选项给bash提供任何命令。

通过使用-t你正在分配一个伪tty的bash进程。 但是,您不使用另一个重要的-i选项,即使没有连接,也会保持STDIN打开状态。 没有-i你不能在bash里input任何东西,因此bash一直在等待下一个命令。

echo命令立即退出状态0,因为echo不是bash类的交互过程。

所以正确的方式开始bash是:

 docker run -it fedora bash 

根据官方文件 :

对于交互式进程(如shell),您必须一起使用-i -t来为容器进程分配一个tty。 -i -t经常被写。