在Docker中,如何停止所有正在运行的容器?

在 Docker 中停止所有正在运行的容器,有以下几种高效方法:

方法一:使用 docker stop + 子命令组合 (推荐)

docker stop $(docker ps -q)
  • 说明
    1. docker ps -q 获取所有运行中容器的 ID(安静模式,只输出 ID)
    2. $(...) 将结果作为参数传递给 docker stop
  • 特点:简洁高效,单行命令完成

方法二:使用 xargs 管道操作

docker ps -q | xargs docker stop
  • 说明
    • 通过管道将容器 ID 列表传递给 xargs
    • xargs 自动处理参数传递
  • 优势:避免参数列表过长的问题,适合大量容器

方法三:使用 Docker 内置过滤功能

docker container stop $(docker container ls -q)
  • 说明
    • docker container ls -q 获取运行中容器 ID
    • 使用 Docker 推荐的容器管理子命令
  • 最佳实践:官方推荐格式,语义清晰

方法四:停止特定容器(扩展场景)

# 停止所有标签为 "temp" 的容器
docker stop $(docker ps -q --filter "label=temp")

# 停止所有名称包含 "web" 的容器
docker stop $(docker ps -q --filter "name=web")

关键参数解析

命令/参数 作用
docker ps -q 只输出运行中容器的 ID
docker stop 优雅停止容器(发送 SIGTERM)
xargs 将输入转换为命令参数
-q/--quiet 只显示容器 ID
--filter 按条件过滤容器

注意事项

  1. 优雅停止docker stop 会给容器内进程发送 SIGTERM 信号,允许进程优雅退出(默认 10 秒超时后强制停止)
  2. 强制停止:如需立即停止,改用 docker kill 命令(发送 SIGKILL)
    docker kill $(docker ps -q)
    
  3. 状态验证:停止后可用 docker ps -a 查看容器状态
  4. 批量操作风险:生产环境谨慎使用,避免误停重要服务

💡 最佳实践:日常开发推荐方法一 docker stop $(docker ps -q),服务器维护推荐方法二避免参数过长问题。

posted @ 2025-07-30 19:38  天道酬勤zjh  阅读(92)  评论(0)    收藏  举报