首页 / Docker 入门教程 / 容器生命周期管理

Docker 入门教程

容器生命周期管理

本教程共 25 篇 · 第 7 篇 · 更新于 2026-07-26 · 约 7 分钟阅读

DockerDocker 入门教程容器生命周期docker stopdocker rmdocker start

7. 容器生命周期管理

本节目标:掌握容器的创建、启动、停止、重启、删除,搞清容器几种状态的流转关系,学会批量操作。学完你能把容器从生到死完整管起来。

容器的一生:状态流转

容器从创建到销毁,会经历几种状态。先在心里画一张状态图,后面命令就好理解了。

  • created(已创建):容器建好了,但还没启动。
  • running(运行中):容器正在跑,主进程活着。
  • paused(已暂停):容器被临时挂起,进程冻结但没退出。
  • exited(已停止):主进程结束,容器停了,但还在。
  • dead(死亡):异常状态,通常出错了。

最常见的就是 runningexited 之间来回切:启动进 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

容器从 createdexited 变成 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 / killrunningexited
  • start / restartexitedrunning
  • rmexited → 删除。

暂停容器:docker pause

除了停,还能「暂停」。pause 把容器进程冻结,但不退出,状态变 paused

docker pause my-ubuntu

恢复用 unpause

docker unpause my-ubuntu

pausestop 的区别: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 删。记住状态在 runningexited 之间流转,加上 prune 做批量清理,日常管理就够用了。

下一节我们看怎么观察这些容器—查看状态、看日志、查详情。