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 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 守护进程的配置,然后想用旧容器来验证新配置。
相关推荐
明长歌1 小时前
【docker】docker registry搭建私有镜像仓库
运维·docker·容器
movie__movie1 小时前
如何正确的配置eureka server集群
云原生·eureka
藥瓿亭4 小时前
K8S认证|CKS题库+答案| 11. AppArmor
运维·服务器·docker·云原生·容器·kubernetes·cks
955.4 小时前
k8s从入门到放弃之Ingress七层负载
云原生·容器·kubernetes
被一米六支配的恐惧4 小时前
argocd部署cli工具并添加k8s集群
docker·kubernetes·argocd
江池俊5 小时前
通过Docker和内网穿透技术在Linux上搭建远程Logseq笔记系统
linux·笔记·docker
木头左7 小时前
Docker容器化镜像分层原理及优化策略
java·eureka
昌sit!7 小时前
K8S项目需求分析
云原生·容器·kubernetes
David爱编程9 小时前
Docker 安全全揭秘:防逃逸、防漏洞、防越权,一篇学会容器防御!
后端·docker·容器
TDengine (老段)10 小时前
TDengine 快速体验(Docker 镜像方式)
大数据·数据库·物联网·docker·时序数据库·tdengine·涛思数据