容器生命周期管理
本教程共 25 篇 · 第 7 篇 · 更新于 2026-07-26 · 约 7 分钟阅读
7. 容器生命周期管理
本节目标:掌握容器的创建、启动、停止、重启、删除,搞清容器几种状态的流转关系,学会批量操作。学完你能把容器从生到死完整管起来。
容器的一生:状态流转
容器从创建到销毁,会经历几种状态。先在心里画一张状态图,后面命令就好理解了。
- created(已创建):容器建好了,但还没启动。
- running(运行中):容器正在跑,主进程活着。
- paused(已暂停):容器被临时挂起,进程冻结但没退出。
- exited(已停止):主进程结束,容器停了,但还在。
- dead(死亡):异常状态,通常出错了。
最常见的就是 running 和 exited 之间来回切:启动进 running,停了变 exited,再启动又回 running。删掉才彻底消失。
创建但不启动:docker create
docker create 只创建容器,不启动它。和 docker run 的区别就在这—run 是创建加启动一条龙,create 只做前半步:
docker create --name my-ubuntu ubuntu
执行后返回容器 ID,容器处于 created 状态。等你准备好再 start 它。
实际用得不多,但在「先把容器配好、择机启动」的场景下有用。
启动容器:docker start
start 用来启动一个已经存在的容器(不管是 create 出来的,还是之前停掉的):
docker start my-ubuntu
容器从 created 或 exited 变成 running。
Tip
docker run其实等于docker create+docker start。理解这点,你就明白为什么同一个镜像能run出多个容器,而start只能启动已有的容器。
停止容器:docker stop
stop 优雅地停止一个运行中的容器:
docker stop my-ubuntu
它先给容器主进程发 SIGTERM 信号,让它自己收尾;等 10 秒还没退出,再发 SIGKILL 强杀。容器进入 exited 状态,但没被删除,还能再 start。
想立刻强杀不等,用 docker kill:
docker kill my-ubuntu
它直接发 SIGKILL,不给应用收尾机会。正常停止用 stop,只有卡死了才用 kill。
重启容器:docker restart
restart 就是先 stop 再 start,容器状态回到 running:
docker restart my-ubuntu
改了容器配置、或者应用卡住需要重启时常用。
删除容器:docker rm
容器停了之后还在占地,不需要了就 rm 删掉:
docker rm my-ubuntu
Warning只能删
exited状态的容器。运行中的容器直接rm会报错:You cannot remove a running container。要么先stop,要么加-f强制删(等于先 kill 再 rm):docker rm -f my-ubuntu。
一图看懂状态流转
把命令和状态对应起来:
create start
[空] ─────────► created ─────────► running
▲ │
│ stop│kill
│ ▼
└── exited ◄──────┘
│
rm│
▼
[删除]
run= 一步从 [空] 到running。stop/kill:running→exited。start/restart:exited→running。rm:exited→ 删除。
暂停容器:docker pause
除了停,还能「暂停」。pause 把容器进程冻结,但不退出,状态变 paused:
docker pause my-ubuntu
恢复用 unpause:
docker unpause my-ubuntu
pause 和 stop 的区别:pause 不杀进程,恢复后继续接着跑;stop 是真停了,再 start 等于重新启动主进程。临时让容器「歇一下」用 pause 比较合适。
批量操作
容器一多,一个个敲命令不现实。下面这几个批量操作很实用。
停止所有运行中的容器
docker stop $(docker ps -q)
docker ps -q 只列出运行中容器的 ID,$() 把结果传给 stop。没容器时这条命令会报个无害的错,忽略即可。
删除所有已停止的容器
docker container prune
它只删 exited 状态的,运行中的不动。这是清理残留容器最干净的方式。
Tip也可以用
docker rm $(docker ps -aq)删掉所有容器(包括停止的),但要小心—这会把所有非运行中的容器一锅端。生产环境别乱用,先docker ps -a看清楚再决定。
删除所有容器(含运行中)
docker rm -f $(docker ps -aq)
-aq 列出所有容器 ID,-f 强制删。这是「推倒重来」的核弹级操作,确认环境不要了再用。
一个完整的小练习
把上面的命令串起来走一遍:
# 起一个后台容器
docker run -d --name web nginx
# 停止它
docker stop web
# 再启动
docker start web
# 重启
docker restart web
# 停掉并删除
docker stop web
docker rm web
跑完这套,你对容器从生到死的控制就熟了。
小结
容器生命周期就那几条命令:create 建、start 启、stop 停、restart 重启、rm 删。记住状态在 running 和 exited 之间流转,加上 prune 做批量清理,日常管理就够用了。
下一节我们看怎么观察这些容器—查看状态、看日志、查详情。