我知道一旦主进程(命令)结束,docker容器就会停止.
我也明白-t会分配一个伪TTY
docker run -t <image> <command>
Run Code Online (Sandbox Code Playgroud)
现在,当我默认运行bash时,容器会立即停止,这是预期的
docker run fedora bash
docker -ps =>(this gives empty list)
Run Code Online (Sandbox Code Playgroud)
但是当我像这样用-t运行bash时
docker run -t fedora bash
[CTRL+C]
docker ps =>(this shows one running container)
Run Code Online (Sandbox Code Playgroud)
为什么-t保持bash进程运行?虽然相同的-t不会保持,例如,echo运行
docker run -t fedora echo "hello"
[CTRL+C]
docker ps =>(this shows empty list although we added -t)
Run Code Online (Sandbox Code Playgroud)
当你bash没有使用时,-t它立即退出状态0,因为你没有提供任何bash使用-c选项的命令.
通过使用,-t您将分配一个伪tty进行bash处理.但是-i,STDIN即使没有附加,您也没有使用另一个保持打开的重要选项.没有-i你不能在里面输入任何内容bash因此bash继续运行等待下一个命令.
echo命令以状态0立即退出,因为echo它不是一个交互式进程bash.
所以正确的方法bash是:
docker run -it fedora bash
Run Code Online (Sandbox Code Playgroud)
根据官方文件:
对于交互式进程(如shell),必须
-i -t一起使用才能为容器进程分配tty.-i -t经常写-it.
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |