2016-12-15 35 views
2

爲什麼我的docker在執行我的shell腳本後退出?謝謝。爲什麼我的docker在執行我的shell腳本後退出?

泊塢版本:

docker --version 
Docker version 1.12.4, build 1564f02 

我的圖片:

docker pull lw96/ubuntu-16.04-lnmp1.3 

後,我跑:

docker run -it -d --name test -p 8080:80 lw96/ubuntu-16.04-lnmp1.3 sh /root/run.sh 

和我一起檢查:docker ps -a

[email protected]:/home/liwei# docker ps -a 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS     NAMES 
68c0ce4c59f7  a57b0c1a60cf  "/bin/bash"   2 minutes ago  Up 2 minutes  0.0.0.0:8080->80/tcp test 

這裏的run.sh:

#! /bin/bash 
lnmp restart 
echo "lnmp already start" 
exit 0 

而且我得到的日誌:

[email protected]:/home/liwei# docker logs -f test 
+-------------------------------------------+ 
| Manager for LNMP, Written by Licess | 
+-------------------------------------------+ 
|    http://lnmp.org    | 
+-------------------------------------------+ 
Stoping LNMP... 
Stoping nginx... nginx is not running. 
* MySQL server PID file could not be found! 
Gracefully shutting down php-fpm /etc/init.d/php-fpm: 82: kill: No such process 

................................... failed. Use force-quit 
Starting LNMP... 
Starting nginx... done 
Starting MySQL 
.. * 
Starting php-fpm done 
lnmp already start! 

在那之後,我的碼頭工人容器出口:

[email protected]:/home/liwei# docker ps -a 
CONTAINER ID  IMAGE      COMMAND    CREATED    STATUS      PORTS    NAMES 
cb98d7427802  lw96/ubuntu-16.04-lnmp1.3 "sh /root/run.sh" 8 minutes ago  Exited (0) 7 minutes ago      test 

但是,當我使用:

docker pull lw96/ubuntu-16.04-lnmp1.3 

docker run -it -d -p 80:80 --name test lw96/ubuntu-16.04-lnmp1.3 

docker exec -it test /bin/bash 

cd ~ && ./run.sh 

我的容器運行良好。爲什麼?????

回答

2

只要主進程正在運行,docker容器就會運行,只要入口點/命令進程退出,它就會結束。在你的情況下,只要你到達exit 0線,你的過程完成,碼頭集裝箱應該退出。

如果你想防止這種情況,你必須保持你的進程運行。在這裏你有很多選擇,比如在前臺運行你的進程,或者通過做一些類似tail -f /some/log/file的日誌來源於你的後臺運行進程來保持進程運行。

+0

也'睡眠無限'或'而真;做回聲你好世界;睡1; done'也可以正常工作 – user2915097

+0

基本上任何事情都會持續下去,越有意義越好! – mohamnag

+0

@mohamnag我明白了你的觀點。我嘗試在我的run.sh文件中添加'sleep infinity',然後'docker run -it -d --name test -p 8080:80 lw96/ubuntu-16.04 -lnmp1.3 sh/root/run.sh'工作很好。同樣,像'tail -f/dev/null'可以幫助,由於某種原因從[Bash:無限的睡眠(無限阻塞)]更具有兼容性(http://stackoverflow.com/questions/2935183/bash-無限睡眠無限阻塞) –

相關問題