我有一個dockerfile如下:
ENTRYPOINT ["/sbin/tini","-g", "--"]
CMD /home/scrapy/start.sh
我原本的用意是先啟動tini,再執行下面的cmd命令啟動start.sh。
為啥要用tini?
因為我的這個docker容器運行了Selenium,以前沒用tini的時候Selenium運行結束后會有很多僵尸進程沒有退出,遂網上找資料說得用tini。
下面是關于tini的介紹:
原文:
https://cloud-atlas.readthedocs.io/zh-cn/latest/docker/init/docker_tini.html
tini可以等待進程退出時清理僵尸進程和信號轉發。
我使用的基礎鏡像是:apline。
需要手動安裝一下tini:
apk add tini
使用了tini后,Selenium跑完再查看進程果然沒有僵尸進程了,所以就將tini一直保留到現在。
但是我這里是ENTRYPOINT和CMD一起用的,CMD的本意是給ENTRYPOINT提供默認參數的,但是我這里給用成了啟動命令。
所以把它改成:
ENTRYPOINT ["/home/scrapy/start.sh"]
在start.sh里啟動tini好了,但是如果直接這樣寫會報錯:
/bin/sh: /home/scrapy/start.sh: Permission denied
沒有執行權限,給下權限:
RUN chmod +x /home/scrapy/start.sh
完整代碼:
RUN chmod +x /home/scrapy/start.sh
ENTRYPOINT ["/home/scrapy/start.sh"]
然后再在start.sh里啟動tini和其他操作:
#!/bin/sh
/sbin/tini -sg --
flask run --host 0.0.0.0
這篇文章就到這里啦!如果你對文章內容有疑問或想要深入討論,歡迎在評論區留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊并分享給其他同學,讓更多人受益。
想要了解更多相關知識,可以查看我以往的文章,其中有許多精彩內容。記得關注我,獲取及時更新,我們可以一起學習、討論技術,共同進步。
感謝你的閱讀與支持,期待在未來的文章中與你再次相遇!