docker停止信号java_Docker 部署Spring boot 项目如何优雅的关闭(Eureka下线)

问题描述:

Docker 直接停止镜像,spirngCloud服务直接停止,并未正常从注册中心下线。

问题原因:

使用 docker stop 关闭容器时, 只有 init(pid 1)进程能收到中断信号, 如果容器的pid 1 进程是 sh 进程, 它不具备转发结束信号到它的子进程的能力, 所以我们真正的java程序得不到中断信号, 也就不能实现优雅关闭

关闭动作并未传递到我们自己运行的进程中。

解决方案:

通过运行exec命令,它将代替shell进程把SIGTERM传播到应用线程

ENTRYPOINT [ "sh", "-c", "exec java -jar /apps/app.jar"]

具体如何修改:

docker-maven-plugin 插件配置修改

原先:

["java","-jar","/${project.build.finalName}.jar"]

修改为:

["sh","-c","execjava-jar/${project.build.finalName}.jar"]

实验测试:

运行容器  run

aa3ab9ab96b462f4f35b13316f403d8d.png

服务正常注册,注册中心接口 返回状态码 204

停止容器 stop

32afdb9e566b49ce544d32bd6fb4303d.png

触发spring容器注销事件, 注册中心接口返回状态码 204  ,服务在注册中心状态为 DOWN

重要说明:

Docker  Kill  命令不支持!

Kill  容器之间杀死,可以看做是宿主机直接杀死了一个进程,触发不了,注销事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值