2016-03-17 41 views
1

我知道一旦主進程(命令)結束,docker容器就會停止。爲什麼docker運行-t讓bash進程退出並停止容器

我也明白了-t將分配一個僞TTY

docker run -t <image> <command> 

現在,當我運行默認的bash容器立即停止,預計

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

但是當我運行bash與-t像這樣

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

爲什麼-t保持bash進程運行?雖然同-t不會保留,例如,回聲運行

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

回答

4

當您使用bash沒有-t它與狀態0立即既然你不使用-c選項提供任何命令bash退出。

通過使用-t您正在分配一個僞tty到bash進程。但是,您並未使用另一個重要的-i選項,即使未連接,也會使STDIN處於打開狀態。如果沒有-i,您不能在bash內輸入任何內容,因此bash會繼續等待下一個命令。

echo命令立即以狀態0退出,因爲echo不是像bash這樣的交互式進程。

所以,正確的開始bash方法是:

docker run -it fedora bash 

official documentation

對於交互進程(如殼),你必須按順序使用-i -t一起分配一個tty的容器過程。 -i -t通常寫爲-it

相關問題