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

Docker重启流程解析

docker stopdocker start 的过程

这个组合操作的本质是:停止容器内的进程,但保留容器的文件系统层,然后重新启动一个新的进程。

  1. docker stop <container_name>

    • Docker 向容器内的主进程(PID 1)发送一个 SIGTERM 信号。
    • 这给了容器内应用程序一个“优雅关闭”(Graceful Shutdown)的机会,比如保存当前状态、关闭数据库连接、完成正在处理的网络请求等。
    • Docker会等待一个默认的宽限期(通常是10秒)。
    • 如果在宽限期后进程还未退出,Docker 会发送一个 SIGKILL 信号,强制杀死进程。
    • 结果:容器内所有进程停止运行,容器进入 Exited (已退出) 状态。但是,容器的所有配置和文件系统层都被完整保留了下来。你在容器里创建的文件、修改的配置等,都还在。
  2. 关于 mount 的问题

    • 不会重新 mount
    • 卷(Volumes)和绑定挂载(Bind Mounts)是在你首次使用 docker rundocker create 创建容器时配置和挂载的。
    • 当你执行 docker start 时,它只是将一个已存在的、已停止的容器重新启动。它会**重新连接(re-attaches)**到已经配置好的卷和挂载点上,而不是执行新的挂载操作。你在卷里写入的数据会保持不变。
  3. docker start <container_name>

    • 它获取 Exited 状态的容器。
    • 使用该容器保留的文件系统层
    • 重新执行容器启动时定义的命令 (CMDENTRYPOINT)。
    • 容器内的进程重新开始运行,容器状态变为 Up (运行中)。

总结一下 stop -> start 流程: 这是一个有状态的重启。容器的文件系统(包括你上次运行时写入的数据)和所有挂载卷都保持不变,只是进程被停止然后重新启动。内存中的状态会丢失。


docker startdocker restart 的功能区别

docker restart 本质上是一个方便用户的快捷命令,它捆绑了 stopstart 的逻辑。

特性docker startdocker restart
目标容器状态只能用于 已停止 (Exited) 的容器。可以用于 运行中 (Up)已停止 (Exited) 的容器。
对运行中容器的操作无任何效果。先停止 (stop),再启动 (start)
对已停止容器的操作启动容器。启动容器(效果同 start)。
主要用途手动启动一个之前已停止的容器。快速“重启”或“重置”一个容器,无论它当前是何状态。
详细解释:
  • docker start:是一个单一目的的命令。它的工作就是“启动一个已停止的容器”。如果你对一个正在运行的容器执行 docker start,它什么也不会做。

  • docker restart:是一个复合命令,更智能。

    • 如果容器正在运行,它会先执行 stop 操作(同样有10秒的优雅关闭宽限期),然后再执行 start 操作。
    • 如果容器已经停止,它的行为就和 docker start 完全一样。
什么时候用哪个?
  • 使用 docker restart

    • 最常见的场景。当你的应用程序无响应、内存泄漏,或者你更新了挂载到容器内的配置文件,需要应用程序重新加载时,直接用 restart 就好。它很方便,不需要你先去判断容器当前的状态。
  • 使用 docker stop / docker start

    • 当你需要在停止和启动之间执行某些维护操作时。例如:
      • 你需要停止容器,然后对它挂载的卷进行一次安全的备份,确认备份完成后再启动容器。
      • 你需要修改某些 Docker 守护进程的配置,然后想用旧容器来验证新配置。
http://www.xdnf.cn/news/965881.html

相关文章:

  • MySQL中的CONVERT_TZ() 函数
  • C++ 智能指针实现原理
  • [一生一芯] 如何基于iSTA 分析时序
  • 3-存储系统
  • 【OpenCV】双相机结构光成像与图像交叉融合实现【C++篇】
  • 【Qt】Qt生成的exe依赖库与打包
  • 一天时间解决期末不挂科
  • 人工智能增强入侵检测系统以对抗高级持续性杀伤链
  • CTF show Web 红包题第六弹
  • 条件概率:AI大模型概率统计的基石
  • 第二讲 认识变量及数学运算符
  • 《广度优先搜索》题集
  • 一个n8n构建的能和LLM对话的Agent
  • mybatics
  • LCS4110R安全芯片防抄板原理
  • 黑马python(三)
  • 手写muduo网络库(三):事件分发器(Poller,EPollPoller实现)
  • java复习 07
  • C#设计模式
  • 用Python实现卡片人探险游戏:能量采集与生存挑战
  • Spring Boot 4.0.0 新特性详解:深入解读 Spring Framework 7.0.0
  • flutter基础面试知识汇总(二)
  • linux 错误码总结
  • HMTL+CSS+JS-新手小白循序渐进案例入门
  • 期末考试复习总结-《ArkTS基础语法(上)》
  • 无人机机器人资源整合
  • ETL中图表统计分析模版组件使用
  • CppCon 2015 学习:C++ WAT
  • 无人机动力系统核心技术解析
  • leetcode240-搜索二维矩阵