必须先停止再删除容器,且删除不可逆;docker stop发送term信号优雅退出,超时后发kill;docker rm仅删已停止容器,-f强制删除,-v清理匿名卷;批量操作需谨慎筛选。
删除容器前必须完成收尾工作,否则容易引发数据残留、资源泄漏或磁盘爆满。关键不是“删得快”,而是“停得稳、清得净、删得准”。
先停止,再删除:两步不可合并
docker rm 直接删运行中的容器会失败(除非加 -f),这不是限制,而是保护机制。正确顺序是:
- 用 docker stop 容器名 发送 SIGTERM,给应用 10 秒(默认)时间做清理
- 确认容器状态为 Exited 后,再执行 docker rm 容器名
- 若需批量清理已停止容器,用 docker container prune,它只删 Exited 状态的容器,安全可靠
确保优雅退出:从代码到配置都要配合
stop 能否成功收尾,取决于容器内主进程是否响应 SIGTERM:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 应用代码中需显式监听 SIGTERM(如 Go 的 signal.Notify、Python 的 signal.signal)并执行关闭逻辑
- Dockerfile 中声明 STOPSIGNAL SIGTERM,避免默认用 SIGKILL
- 启动时通过 --stop-timeout=30 延长等待时间(比如数据库迁移或大文件上传场景)
- 避免用
sh -c "your-command"启动,改用exec your-command,防止 shell 拦截信号
关联资源要同步清理
容器本身只是载体,真正要收尾的是它挂载和依赖的外部资源:
- 数据卷(volume)默认不会随容器删除,如需清理,单独执行 docker volume rm 卷名 或 docker volume prune
- 临时挂载的主机目录(bind mount)不归 Docker 管理,删除容器后需人工确认是否保留或清理
- 网络端口、自定义网络中的容器记录,在容器删除后自动释放,无需额外操作
- 若使用 docker-compose,docker compose down 会自动停止并删除容器、网络,还能加 -v 参数一并删 volume
验证是否真清理干净
删完别急着关终端,快速检查三件事:
- docker ps -a | grep 容器名 —— 确认已不在列表中
- docker volume ls —— 查看 volume 是否仍有残留(尤其命名卷)
- df -h 或 docker system df —— 检查磁盘空间是否释放,警惕“僵尸卷”占用空间










