如何避免Docker容器啓動腳本運行後自動退出

原文鏈接:https://blog.csdn.net/jiangh_catr/article/details/52782815

近期想做一個cron定時任務的docker,在Dockerfile中做如下定義

FROM library/alpine:latest
RUN apk --update add rsync openssh bash
VOLUME ["/data"]
ADD start.sh /
CMD ["/bin/bash","/start.sh"]

在start.sh中用crontab 加載定時任務run.cron,然後啓動crond:

/usr/bin/crontab /run.cron

/usr/sbin/crond

docker build Dockerfile後,採用docker run --name xxx -d 運行容器,發現start.sh執行後容器就退出了,根本無法啓動定時任務,網上各種辦法有說用nohup,有死循環,還有說用信號,發現都不靠譜。分析了一下docker的機制,一個docker容器同時只能管理一個進程,這個進程退出後,容器也就退出了。這並不意味着一個容器裏只能同時運行一個進程(那樣太浪費了),只是最後一個運行的進程不能退出。這個案例在容器啓動運行start.sh,crond的缺省設置是後臺運行,這樣導致start.sh運行結束,容器跟着start.sh退出而退出。因此,在start.sh中,crond 應強制採用前臺運行:crond -f。這樣start.sh就不會退出, docker run -d 運行時就可以保持容器後臺運行。

start.sh總結總結:

(1)容器中運行多個守護進程時,前面的進程要用後臺方式運行(或添加 &),否則後面的服務無法啓動

(2)容器中最後一個守護進程一定要用前臺方式運行,否則start.sh退出,容器退出,所有的服務就白啓動了

以上是docker鏡像啓動腳本的一點心得
————————————————
版權聲明:本文爲CSDN博主「IT江湖漂」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jiangh_catr/article/details/52782815

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章