docker 正確退出容器的方式

docker自身給我提供了兩種退出容器的方式:

  1. docker kill
    命令執(zhí)行時(shí)會(huì)直接發(fā)出SIGKILL的系統(tǒng)信號(hào),以強(qiáng)行終止容器中程序的運(yùn)行。類(lèi)似Linux系統(tǒng)中的kill -9或者是kill -SIGKILL命令,用來(lái)發(fā)送SIGKILL信號(hào),強(qiáng)行終止進(jìn)程。
Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...]

Kill one or more running containers

Options:
  -s, --signal string   Signal to send to the container (default "KILL")
  1. docker stop
    命令執(zhí)行時(shí),會(huì)先向容器中PID為1的進(jìn)程發(fā)送系統(tǒng)信號(hào)SIGTERM,然后等待容器中的應(yīng)用程序終止執(zhí)行,如果等待時(shí)間達(dá)到設(shè)定的超時(shí)時(shí)間,或者默認(rèn)的10秒,會(huì)繼續(xù)發(fā)送SIGKILL的系統(tǒng)信號(hào)強(qiáng)行kill掉進(jìn)程。
Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Options:
  -t, --time int   Seconds to wait for stop before killing it (default 10)

兩者區(qū)別:

不難看出兩者的區(qū)別,kill是直接強(qiáng)制kill掉進(jìn)程然后退出容器,或者直接發(fā)送其他信號(hào)然后退出,而stop是可以設(shè)置一個(gè)延遲的時(shí)間,這個(gè)時(shí)間你可以用來(lái)處理一些退出容器前的工作,顯然要想優(yōu)雅的退出容器stop肯定是不二之選。

采坑點(diǎn):

  • stop 傳遞的信號(hào)只能1號(hào)進(jìn)程接收到,其他進(jìn)程接收不到。
  • stop 傳遞的信號(hào)只能是SIGTERM信號(hào)。

解決辦法:

  1. 如果你的進(jìn)程自己能處理退出的工作,那么只需讓他變成1號(hào)進(jìn)程即可,可以使用exec這個(gè)命令來(lái)執(zhí)行你的命令。
  2. 如果不是第一種情況,那么只能寫(xiě)一個(gè)腳本(shell,go等都可以)來(lái)監(jiān)聽(tīng)信號(hào),當(dāng)監(jiān)聽(tīng)到信號(hào)后做出相應(yīng)的處理。

歡迎大家評(píng)論,提供優(yōu)雅的解決辦法,謝謝??!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容