容器生命周期包含Created、Running、Paused、Exited、Deleted五种核心状态,分别对应docker create、run/start、pause、stop/kill、rm命令,状态转换需严格遵循资源可控与操作可逆原则。
容器生命周期管理,关键在状态可控、操作可逆、资源不泄漏。核心不是记住所有命令,而是理解每个动作背后的状态变化和资源影响。
容器五种核心状态与对应命令
容器不是“开/关”二元开关,而是一套有明确流转逻辑的状态系统:
-
Created(初建):用
docker create创建,配置已写入但进程未启动;适合预检配置、批量准备容器实例 -
Running(运行):通过
docker run或docker start进入;主进程退出即自动转为 Exited -
Paused(暂停):执行
docker pause,所有进程冻结、内存保留、网络连接维持;适合临时腾出 CPU 资源而不丢上下文 -
Exited(停止):
docker stop发送 SIGTERM 等待优雅退出(默认 10 秒),超时则发 SIGKILL;docker kill直接强杀 -
Deleted(删除):仅
docker rm可达,且只接受已停止容器;加-f才能强制删运行中容器
run/start/stop/restart 的实用边界
看似简单,但误用会导致服务中断或状态混乱:
-
docker run是“创建+启动”原子操作,适合首次部署;带--rm可用于一次性任务(如数据迁移脚本) -
docker start只对 Created 或 Exited 容器有效;不能重复启动已在 Running 状态的容器 -
docker stop默认等待 10 秒,可通过--time=30延长;生产环境建议配合应用自身 shutdown hook 使用 -
docker restart等价于 stop → start,不会重建容器配置;若需重载镜像或更新参数,必须先rm再run
高阶控制:重启策略与资源约束
让容器更健壮、更可控,不只是手动操作:
-
自动恢复:用
--restart=unless-stopped最稳妥,容器异常退出会自动拉起,但手动stop后不再重启 -
内存保护:
-m 512m限制最大内存,配合--oom-kill-disable=false(默认开启)可防止 OOM 时整个容器被系统杀掉 -
健康检查:添加
--health-cmd和--health-interval,使docker ps中显示健康状态,便于编排工具判断是否转发流量 -
资源隔离:
--cpus=0.5限制 CPU 时间片,--memory-reservation=256m设置软性下限,避免低负载时被过度回收
清理与诊断:别让僵尸容器堆积
长期运行环境里,残留容器会占用磁盘、命名空间和网络端口:
- 查所有容器(含已停):
docker ps -a;按状态过滤:docker ps -a --filter status=exited - 批量删已停容器:
docker rm $(docker ps -aq --filter status=exited) - 看详细状态和挂载信息:
docker inspect my-container,重点关注State.Status、HostConfig.Binds、NetworkSettings.Ports - 进容器排查:
docker exec -it my-container sh;若容器无 shell,可用docker exec my-container ls /app类似轻量命令


















