mysql小鲸鱼_杀死一只小鲸鱼

文章探讨了在Docker环境中,如何确保应用能够优雅退出,特别是当涉及信号处理如SIGTERM时。作者通过实例分析了Docker stop发送的信号流程,解释了为何应用必须作为PID 1的进程运行以接收并处理信号,以及如何修改Dockerfile以确保应用正确接收信号并完成清理工作。
摘要由CSDN通过智能技术生成

03f7448625c5ed937f3ad87b863a5a36.png

之所以会有这个主题,是因为这几天我给mysql集群前置了一个keepalived,为了方便也做成了docker镜像,丢给k8s来部署。但实际测试时发现,当停止或者删除keepalived容器后,网卡上还残余之前keepalived下发的virtual ip。

直接在宿主机上安装keepalived不会有这个问题。从keepalived源码上来看,它会接管linux发给它的SIGTERM信号,之后清理现场,包括下发给接口的虚IP,所以问题原因就比较简单了,容器在退出时,并没用将SIGTERM信号传递给keepalived进程,造成keepalived强制退出,最终virtual ip残留。

要解决这个问题,还需要从容器退出开始谈起。先挖个坑,晚上填。

docker容器退出会收到哪些信号?

不同的命令,收到的信号不同。

docker stop

默认docker stop会向容器发送SIGTERM信号,并等待10秒;如果10秒后容器没有退出,则会发送SIGKILL信号,强制杀死该容器。我的keepalived容器就是收到信号10s后仍然存活,最后被SIGKILL杀死的,docker ps -a查看容器的STATUS,可以看到Exited (137) 2 hours ago。137=128+9,即退出原因是收到了信号9(即SIGK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值