最稳妥的方式是分两步:先执行docker stop $(docker ps -q)停止所有运行中容器,再执行docker rm $(docker ps -aq)删除全部已停止容器;一步到位的docker rm -f $(docker ps -aq)虽快但不可逆,易致数据丢失。
最稳妥的方式是分两步:先批量停止所有运行中的容器,再删除全部容器(含已停止的)。一步到位虽快,但跳过确认环节容易误操作,尤其在生产或共享环境中。
先停所有运行中容器
执行命令:
docker stop $(docker ps -q)
说明:
– docker ps -q 只列出当前正在运行的容器 ID;
– docker stop 会向每个容器发送 SIGTERM,等待 10 秒后自动补发 SIGKILL;
– 若需延长等待时间(比如数据库需要更长的优雅关闭),可加 -t 30 参数,例如:docker stop -t 30 $(docker ps -q)。
再删所有容器(含已停止)
执行命令:
docker rm $(docker ps -aq)
说明:
– docker ps -aq 列出所有容器(无论状态),只输出 ID;
– 此命令只删已停止的容器,所以必须确保上一步已全部停稳;
– 若有容器因异常卡死未完全退出,可改用 docker kill $(docker ps -aq) 强制终止后再执行本步。
想一步到位?慎用 -f 参数
命令:
docker rm -f $(docker ps -aq)
说明:
– -f 表示强制,对运行中容器自动先 kill 再 rm;
– 等效于上面两步合并,但无中间状态检查;
– ⚠️ 不会提示、不可撤销,所有未持久化的数据(如未挂载卷的 Redis 数据、临时日志等)将立即丢失。
更安全的替代方案
多数时候不需要“全清”,推荐按需精准清理:
- 只删已退出的容器:
docker rm $(docker ps -aq --filter status=exited) - 预览再操作(强烈建议):
docker ps -a --filter status=exited --format "{{.ID}} {{.Names}} {{.Status}}" - 删特定前缀的容器(如测试用):
docker rm $(docker ps -aq --filter name=^test-) - 避免误伤镜像和卷:绝不轻易用
docker system prune -a -f,它会连带删掉所有镜像、网络、构建缓存,甚至未被引用的卷。











