当前位置: 首页 > 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 守护进程的配置,然后想用旧容器来验证新配置。

相关文章:

  • 基于binlog恢复误删除MySQL数据
  • 利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
  • 系统设计 --- MongoDB亿级数据查询优化策略
  • Python 爬虫工具全解析及实战指南
  • 将两个变量a,b的值进行交换,不使用任何中间变量
  • 【持续更新】linux网络编程试题
  • leetcode240-搜索二维矩阵
  • ps去掉画板
  • Appium 安装指南
  • word的目录和正文之间存在一张空白纸,目录后面的分节符为什么调不上去?
  • MVVM 模式,以及 Angular、React、Vue 和 jQuery 的区别与关系
  • 【无标题】装箱问题的拓扑动力学解法:几何凝聚与量子坍缩模型
  • LeetCode - 394. 字符串解码
  • Java多线程实现之Callable接口深度解析
  • 蓝桥杯 2024 15届国赛 A组 儿童节快乐
  • 清新文艺手绘学习教育培训竞标汇报PPT模版分享
  • error: Sandbox: rsync(17136) deny(1) file-write-create
  • 【论文解读】ReSearch:让LLM自主学习搜索
  • C++ 手写实现 unordered_map 和 unordered_set:深入解析与源码实战
  • C# 中常用的 字符串截取方法
  • ug.wordpress.org/电脑优化系统的软件哪个好
  • flashfxp发布网站/互联网营销工具
  • php 开源的企业网站/查网站流量的网址
  • 苏州正规做网站公司/武汉网站建设
  • 网站建设服务价格/新野seo公司
  • 做鞋子批发网站/aso平台