直接用 docker stop 和 docker start 配合容器 ID 或名称即可批量操作,关键在于用 docker ps -q(运行中)、-aq(全部)及 --filter(如 ancestor=nginx、name=^app-)精准获取目标容器列表。

直接用 docker stop 和 docker start 配合容器 ID 或名称就能批量操作,不需要额外工具或脚本,关键在于如何高效获取目标容器列表。
按运行状态批量停止
只停正在运行的容器:
-
docker stop $(docker ps -q)docker ps -q输出所有运行中容器的短 ID,交给docker stop一次性执行。 - 如果只想停特定镜像的容器,比如所有 nginx 容器:
docker stop $(docker ps -q --filter "ancestor=nginx")
按全部容器(含已停止)批量启动或停止
要覆盖所有容器(无论当前状态),用 -a(all)参数:
- 停止全部容器(包括已退出但未删除的):
docker stop $(docker ps -aq) - 启动所有已创建但处于 stopped 状态的容器:
docker start $(docker ps -aq --filter status=exited)
注意:docker start只对 created 或 exited 状态有效,running 或 paused 的容器会跳过。
按名称或标签精准批量操作
适合管理命名规范的容器(如生产环境常用前缀):
- 停止所有以
app-开头的容器:docker stop $(docker ps -q --filter name=^app-) - 启动多个指定名称的容器(空格分隔):
docker start app-web app-db app-cache - 用正则匹配更灵活(需 shell 支持):
docker stop $(docker ps -q | grep -E '^(web|api|cache)')
配合重启策略统一管理
批量禁用自启(防止系统重启后自动拉起):docker update --restart=no $(docker ps -aq)
这不会影响当前运行状态,只修改重启策略。若需同时停+禁启,可组合执行:
docker stop $(docker ps -q) && docker update --restart=no $(docker ps -aq)
不复杂但容易忽略细节:docker ps -q 只输出运行中容器;加 -a 才包含全部;--filter 是精准筛选的核心,比后期用 grep 更可靠。


















