为什么docker run -t阻止bash进程退出和停止容器

时间:2016-03-17 22:16:54

标签: bash docker

据我所知,一旦主进程(命令)结束,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)

1 个答案:

答案 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

根据official documentation

  

对于交互式进程(如shell),必须同时使用-i -t才能为容器进程分配tty。 -i -t通常是-it。{/ p>