据我所知,一旦主进程(命令)结束,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进程运行?虽然相同的-t不会保留,例如,echo running
docker run -t fedora echo "hello"
[CTRL+C]
docker ps =>(this shows empty list although we added -t)
答案 0 :(得分:5)
如果您使用bash
而没有-t
,则会立即退出状态为0,因为您未使用bash
选项向-c
提供任何命令。
通过使用-t
,您正在为bash
进程分配伪tty。但是,即使没有附加,您也不会使用另一个重要的-i
选项来保持STDIN
打开。如果没有-i
,则无法在bash
内输入任何内容,因此bash
会继续等待下一个命令。
echo
命令会立即退出状态为0,因为echo
不是bash
之类的交互式流程。
启动bash
的正确方法是:
docker run -it fedora bash
对于交互式进程(如shell),必须同时使用
-i -t
才能为容器进程分配tty。-i -t
通常是-it
。{/ p>