【发布时间】:2021-12-23 13:43:00
【问题描述】:
如何停止在 Windows 上运行的所有 docker 容器?
docker stop 仅适用于 1 个容器。
任何命令/脚本让它停止所有容器?
【问题讨论】:
标签: docker command-line
如何停止在 Windows 上运行的所有 docker 容器?
docker stop 仅适用于 1 个容器。
任何命令/脚本让它停止所有容器?
【问题讨论】:
标签: docker command-line
您可以创建一个 批处理文件(.bat 或 .cmd),其中包含以下命令:
@ECHO OFF
FOR /f "tokens=*" %%i IN ('docker ps -q') DO docker stop %%i
如果您想直接在控制台中运行此命令,请将%%i 替换为%i,如:
FOR /f "tokens=*" %i IN ('docker ps -q') DO docker stop %i
在 Git Bash 或 Bash for Windows 中,您可以使用以下 Linux 命令:
docker stop $(docker ps -q)
注意:如果没有容器在运行,这将失败
对于 PowerShell,该命令与 Linux 非常相似:
docker ps -q | % { docker stop $_ }
【讨论】:
在 PowerShell 中,您也可以使用此语法
docker container stop $(docker container list -q)
【讨论】:
docker container stop $(docker ps -q)
docker container stop $(docker container ls --quiet) || true 如果您需要忽略 no container 错误。
如果问题的动机是恢复 Docker 占用的内存(就我而言,这就是我到达此页面的原因),我发现唯一的方法是完全停止 Docker Desktop。您可以通过右键单击通知区域(右下角)中的 鲸鱼图标 > 退出 Docker 桌面 来执行此操作。 当您重新启动 Docker Desktop 时,所有容器都会重新出现,并且 Docker 甚至会再次自动将它们设置为 up。
【讨论】:
我的两分钱。
如果您想阻止它们按某些条件过滤
docker ps -a -q --filter "name=container_name" --format="{{.ID}}" | ForEach-Object -Process {docker stop $_ }
或者如果你想停止并一起删除它们
docker ps -a -q --filter "name=container_name" --format="{{.ID}}" | ForEach-Object -Process {docker rm $_ -f}
通过使用 pipe 和 foreach 我避免了在特定机器上没有此类容器时返回的错误,因为 docker stop 或docker rm 至少需要一个参数。
此脚本结合使用
docker container run image_tag --name=container_name
以便稍后在您想要停止和移除容器时使用过滤器。
【讨论】:
对于那些感兴趣的人,这可以在 Powershell 中使用
docker ps -q | % { docker stop $_ }
【讨论】: