docker容器有created、running、paused、stopped、deleted五种核心状态,分别对应docker create、docker run/start、docker pause、docker stop/kill、docker rm操作,状态转换需严格遵循生命周期规则。
容器不是一启动就完事的,它有明确的起承转合。掌握从创建、运行、暂停、停止到删除的全过程,才能真正用好 docker。
五种状态怎么来的?
容器生命周期里,每个状态都对应一个具体动作:
-
Created(初建):用
docker create创建但没启动,配置已写入,进程未运行 -
Running(运行):通过
docker run或docker start启动后进入,CPU、内存、网络都在工作 -
Paused(暂停):执行
docker pause,容器进程被冻结,内存保留但不调度 CPU -
Stopped(停止):用
docker stop正常退出,或docker kill强制终止,进程结束但数据和配置仍存在 -
Deleted(删除):仅对 已停止 的容器执行
docker rm,文件系统和元数据彻底清除
关键命令怎么选?
不同场景下,命令组合决定操作是否安全、可复用:
- 想先配好再启动?用
docker create -p 8080:80 --name myapp nginx,之后再docker start myapp - 要后台常驻服务?直接
docker run -d --name web -p 80:80 -v /data:/usr/share/nginx/html nginx - 临时释放资源又不想丢状态?
docker pause myapp→ 做完事 →docker unpause myapp - 清理不再需要的容器?必须先
docker stop myapp,再docker rm myapp;否则报错“cannot remove running container”
异常情况怎么兜底?
生产环境不能只靠手动干预,得靠参数提前设防:
- 防内存打爆:
docker run -m 512m --oom-kill-disable nginx(慎用,建议配合监控) - 防意外退出:
docker run --restart=on-failure:3 nginx,失败时最多重试 3 次 - 防端口冲突:用
-P让 Docker 自动分配空闲端口,或启动前用docker ps -q --filter "expose=80"查占用 - 防数据丢失:挂载
-v卷或命名卷,避免把数据存在容器内部文件系统里
怎么验证当前状态?
别猜,用命令看真实状态:
-
docker ps:只列 Running 中的容器 -
docker ps -a:列出所有容器(包括 Created、Stopped、Exited) -
docker inspect myapp:查详细信息,比如Status.Status字段就是当前状态,NetworkSettings.Ports看端口映射是否生效 -
docker logs myapp:查输出日志,判断是否真在干活,还是卡在启动阶段











