关键在于掌握五种状态(created→running→paused→exited→deleted)及对应命令语义:docker create预配置后inspect校验,再start启动;pause冻结进程保留上下文,unpause毫秒恢复;stop发送SIGTERM优雅终止,kill强制终结有风险;rm仅删exited容器,-f强制删等效于先stop再rm。
精准控制 docker 容器生命周期,关键在于理解五种状态(created → running → paused → exited → deleted)及其对应命令的语义差异,而不是仅靠 docker run 和 docker stop 走完流程。
区分创建与启动:用 docker create 预留配置空间
直接 docker run 会跳过中间态,无法复核或调试配置。若需精细控制,先用 create 创建但不启动:
-
docker create -d --name my-app -p 8080:80 -v /data:/app/data nginx:latest→ 容器进入 created 状态 - 此时可执行
docker inspect my-app查看网络、挂载、环境变量等是否符合预期 - 确认无误后再
docker start my-app启动,避免运行后才发现端口冲突或卷路径错误
暂停不是停止:冻结进程但保留全部上下文
docker pause 和 docker stop 本质不同:前者是信号级冻结(类似 kill -STOP),后者是终止主进程(发送 SIGTERM)。
-
docker pause my-app→ 瞬间进入 paused 状态,内存、网络、文件句柄全保留,适合紧急排查或临时让出资源 -
docker unpause my-app→ 恢复执行,毫秒级响应,无需重加载或重建连接 - 注意:
pause不适用于 Windows 容器,且不能对已exited的容器执行
停止要分场景:优雅退出 vs 强制终结
docker stop 默认等待 10 秒再发 SIGKILL,但实际行为取决于容器内主进程是否响应 SIGTERM。
- 对支持优雅关闭的服务(如 Nginx、PostgreSQL),
docker stop my-app会触发清理逻辑,确保数据落盘、连接释放 - 若进程僵死或无响应,加
-t 2缩短超时:docker stop -t 2 my-app - 慎用
docker kill(直接发SIGKILL),它跳过所有清理步骤,可能造成数据损坏或锁残留
删除前确认状态:只删 exited 容器,不碰 running 或 paused
docker rm 只接受已停止的容器(exited),这是安全保护机制。
-
docker rm my-app→ 成功前提是容器当前为 exited;否则报错 “container is not stopped” - 想强制删(含正在运行的),加
-f:但等效于先stop再rm,不推荐日常使用 - 批量清理已退出容器:
docker rm $(docker ps -aq --filter status=exited)


















