为什么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
经常被写。