Docker中優(yōu)雅的捕獲kill信號

通過以下命令可以直接傳遞一個kill信號運行的容器:

docker kill -s SIGTERM containID

但是對于一些情況,比如一個python服務(wù),這個信號并不能被預(yù)期那樣地捕獲。比如通常會使用while True: sleep(1)來作為永續(xù)循環(huán)。

對于Docker來說,sleep(1)其最后的命令,kill信號只能作用于這一命令,signal并不能捕獲這個信號。

在搜索了解決方法后,看到這篇文章《通過信號解決docker啟動容器后Exited退出的問題》。里面有一些解決方案,最后作者給出一個Github項目。這個方法,本質(zhì)上是在容器中用一個.sh腳本來運行服務(wù),最后由shell來捕獲命令并在容器內(nèi)部kill掉服務(wù)。

#/bin/bash

cd /path/to/work
python flask_app.py & # 將永續(xù)服務(wù)掛到后臺

# shell 的函數(shù),用于捕獲kill信號后的回調(diào)
prog_exit()
{
    # 找出服務(wù)的 pid, 并向其發(fā)送 kill 信號 15
    ps -ef| grep flas_app |grep -v grep |awk '{print $2}'|xargs kill -15

}

# 捕獲信號 15, 并回調(diào)函數(shù) prog_exit 
trap "prog_exit" 15

# shell 中的永續(xù)服務(wù), 在服務(wù)沒有被kill掉之前一直存在
flag=1
while [ $flag -ne 0 ];do
    sleep 1;
    flag=`ps -ef| grep flas_app |grep -v grep | wc -l`
done;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,876評論 15 147
  • 簡述docker一些常用的操作 查看到docker是否正常運行docker info 返回所有docker所有容器...
    翼動晴空閱讀 1,073評論 0 10
  • # docker --helpUsage: docker [OPTIONS] COMMAND [arg...] ...
    dujh302閱讀 467評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • 我一整個上午在到處轉(zhuǎn)~這一上午走的路應(yīng)該是我這一個月走的路了~ 我該怎么形容我一上午的心情! 有時候都說女生矯情,...
    森女啊閱讀 406評論 0 0

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