docker容器生命周期是可反复切换的状态集合,包括created(docker create创建)、running/exited(docker run/start与stop切换)、paused(docker pause冻结)、deleted(docker rm清理)五种状态。

Docker 容器生命周期不是线性流程,而是一组可反复切换的状态集合。理解它关键在于抓住“状态”和“命令”的对应关系——每个状态由特定命令触发,也决定了你能执行哪些后续操作。
created(已创建):容器存在但没运行
这是容器的初始状态,相当于“准备好但还没开机”。用 docker create 命令生成,比如:
-
docker create --name my-app nginx—— 创建成功后,docker ps -a能看到状态是 created - 此时容器不占 CPU,也不监听端口,只是保留了配置、挂载点、网络设置等元数据
- 适合做预检:确认镜像能拉取、配置无语法错误,再统一启动
running(运行中)与 exited(已退出):启停之间的核心切换
这两个状态最常用,也最容易混淆“停止”和“删除”的区别:
-
running:容器内主进程(PID 1)正在运行。用
docker run -d或docker start进入此状态 -
exited:主进程已结束(正常退出或崩溃),但容器实体仍保留在磁盘上。用
docker stop或程序自己退出都会进入该状态 -
docker ps只显示 running;docker ps -a才能看到 exited 的容器 - exited 状态的容器可以
docker start重新运行,就像重启一台关机的虚拟机
paused(已暂停):冻结进程,不释放内存
这是个中间态,常被忽略但很实用:
-
docker pause my-app会冻结所有进程,CPU 占用归零,但内存内容原样保留 - 适合临时腾出资源又不想丢失运行上下文,比如调试时快速“定格”一个服务
- 不能对 paused 容器执行
docker exec或改配置;必须先docker unpause - 注意:不适用于需要持久化状态的应用(如数据库),因为写操作可能卡在缓冲区
deleted(已删除):彻底清理,不可逆
删除的是容器实例本身,不是镜像:
- 只能删除 exited 状态的容器:
docker rm my-app - 强制删除运行中容器:
docker rm -f my-app,等价于先 stop 再 rm - 删完后
docker ps -a就看不到了,相关匿名卷、网络连接等也会一并清理(除非显式用了--volumes) - 镜像不受影响,仍可用
docker images查看











