Docker重启流程解析

docker stop 再 docker start 的过程

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

  1. docker stop <container_name>

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

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

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

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


docker start 和 docker restart 的功能区别

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

特性 docker start docker 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 守护进程的配置,然后想用旧容器来验证新配置。
相关推荐
江湖有缘18 分钟前
Docker实战 | 使用Docker部署HarborGuard容器安全扫描平台
安全·docker·容器
江湖有缘29 分钟前
Docker实战 | 使用Docker部署Reubah文件转换器和图像处理器
docker·容器·eureka
七夜zippoe1 小时前
把 OpenClaw Agent 搬进 K8s:容器化部署全记录
ai·云原生·容器·kubernetes·openclaw
骑着蜗牛撵大象3272 小时前
ToolJet + PostgreSQL:后台表格、查询和流程,一次搭成可远程访问的业务系统
数据库·低代码·docker·postgresql·内部工具·tooljet
flytalei3 小时前
从 Docker Compose 到 K3s:逐浪笔记首次完整部署与故障排查实战
笔记·docker·容器
吴声子夜歌3 小时前
Docker入门与实战——高级网络功能
网络·docker
JavaPub-rodert13 小时前
Docker 日志为什么能把磁盘写爆?讲透 json-file、local、journald、日志轮转与 docker logs
docker·eureka·json
人生匆匆14 小时前
docker部署ceph集群
ceph·docker·容器
张张123y17 小时前
后端第九课:部署上线(把你的 FastAPI 后端真正跑起来给别人用)
python·docker·部署·fastapi
AscendKing20 小时前
Docker Compose 一键部署 SkyWalking 10.2.0 + Elasticsearch8.11,分布式链路追踪完整实战
elasticsearch·docker·skywalking·链路追踪·微服务监控