当前位置: 首页 > news >正文

docker 容器终止时都做了什么?怎么优雅退出?

docker container stop 的“优雅退出”并不是等到“没有请求流量”才退出,而是通过 信号机制 来实现的。


🧠 工作原理

  1. 当你执行 docker container stop <容器> 时:

    • Docker 会先向容器的 主进程(PID 1) 发送 SIGTERM 信号。
    • 这相当于“礼貌地通知”应用:请准备退出。
  2. 应用如果正确处理了 SIGTERM:

    • 会停止接收新请求
    • 完成正在处理的请求
    • 关闭数据库连接、文件句柄等资源
    • 然后正常退出
  3. Docker 默认会等待 10 秒(可用 -t 参数调整)。

    • 如果进程在这段时间内退出 → 就是“优雅退出”。
    • 如果超时还没退出 → Docker 会发送 SIGKILL,强制终止。

📦 举个例子

  • Web 服务容器:收到 SIGTERM 后,应用可以先停止监听端口,不再接受新请求,同时把正在处理的请求完成,然后退出。
    比如:Java 应用(Spring Boot 等)
    默认行为:JVM 会响应 SIGTERM,触发 Runtime.addShutdownHook。
    最佳实践:
    在 @PreDestroy 或 DisposableBean.destroy() 中释放资源。
    关闭数据库连接池、消息队列消费者。
    确保线程池 shutdown() 并等待任务完成。

  • 数据库容器:会在退出前把缓存数据刷到磁盘,避免数据丢失。


✅ 总结

  • 优雅退出 ≠ 等待没有流量
  • 优雅退出 = 收到 SIGTERM → 应用自己清理资源并退出
  • 如果应用没处理 SIGTERM,Docker 会在超时后用 SIGKILL 强制杀掉进程。
http://www.dtcms.com/a/389970.html

相关文章:

  • 苹果10月还有发布会?多款新品预曝光
  • wincc
  • 获取公网IP的方法
  • 苦瓜叶片病害检测数据集:2w+图像,9类,yolo标注
  • LlamaIndex入门
  • 基于RK3576+FPGA的无人机飞控系统设计
  • Redisson原理
  • PyQt6之日期与时间控件应用案例
  • css | 总结一下flex布局
  • c#里面的catch (Exception e)
  • 浅谈 CDN
  • 125、【OS】【Nuttx】【周边】效果呈现方案解析:分号与换行
  • CBB21-MPP电子元器件 RC容钏 金属化聚丙烯薄膜电容器 电子元器件技术解析
  • Day02 递归 | 46. 全排列、226. 翻转二叉树
  • [Spring Cloud][6] Eureka Server 搭建详解,与 Zookeeper 的区别
  • 前端性能优化完全指南:从入门到实战
  • 国产组态软件对工控行业的影响及作用
  • Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
  • 从把python里的一个函数变成接口到自动化测试平台的实现
  • LibreTV+cpolar:打造私人云影院的智能方案
  • 软考高级系统架构设计师之架构设计扩展篇(一)
  • 宝德PR1710P服务器安装Anolis8.6系统
  • ABAP读写SAP服务器文件
  • 无人机操控核心:智能飞行的技术引擎
  • H5页面在真机移动端1px边框处理方案总结
  • 本地大模型部署与应用: Dify 与 Ollama 集成
  • 从 “盲调” 到 “精准优化”:SQL Server 表统计信息实战指南
  • ffmpeg.dll是什么?4步彻底解决ffmpeg.dll丢失报错问题
  • ROS2C++核心基础
  • 第二篇:搭建现代C++开发环境:VS2022 / CLion / VSCode实战