Docker容器生命周期始于镜像创建(created),经启动进入运行(running),可暂停(paused)或停止(exited),最终清理删除;各状态对应明确命令与底层行为,如created时仅初始化环境但无PID,running时主进程为PID 1并启用可写层。
理解这个转化过程,关键在于把容器看作一个有始有终的进程,而不是静态文件。镜像只是模板,真正跑起来的容器才进入生命周期——从创建、运行、暂停、停止,到最终清理,每一步都对应明确的命令和底层行为。
镜像到容器:创建(created)是起点
docker create 命令不会启动进程,只做三件事:解压镜像层、初始化存储驱动、配置网络命名空间。此时容器在 ps -a 中可见,但 ps 命令查不到它的 PID,因为内核尚未为其分配进程空间。这步常被跳过,因为 docker run 默认合并了 create + start,但分离操作对调试挂载失败或权限问题很有用。
启动即激活:running 状态意味着进程真实运转
docker start 或 docker run -d 触发后,Docker 会执行 ENTRYPOINT/CMD 指定的主进程,并将其设为 PID 1。这时容器才真正“活”了:端口开始监听、可写层接受修改、资源使用可被 stats 监控。如果启动后立刻退出,说明主进程启动失败——不是容器没起来,而是它启动完就崩了,得用 docker logs 查首条错误。
暂停与停止:冻结 vs 终止,机制完全不同
docker pause 使用 cgroups freezer 冻结所有子进程,内存和文件系统原样保留,只是 CPU 时间片被拿掉;而 docker stop 先发 SIGTERM(默认等 10 秒),再发 SIGKILL 强制终结主进程。paused 状态下无法 exec,因为进程不可调度;exited 状态下还能查日志、检视文件系统,是安全排查的窗口期。
清理阶段:状态决定能否直接删除
docker rm 只允许删 created 或 exited 状态的容器。running 或 paused 的必须先 stop 或 unpause。若遇到 dead 状态,说明 Docker daemon 在清理时卡住了——常见于容器内进程占着 mount 或 network namespace 不放,需 inspect 查 Status.State.Error 字段,必要时手动 umount 或重启 dockerd。


















