'Stop all docker containers at once on Windows

How can I stop all docker containers running on Windows?

docker stop is for 1 container only.

Any command/script to make it stop all containers?



Solution 1:[1]

You could create a batch-file (.bat or .cmd) with these commands in it:

@ECHO OFF
FOR /f "tokens=*" %%i IN ('docker ps -q') DO docker stop %%i

If you want to run this command directly in the console, replace %%i with %i, like:

FOR /f "tokens=*" %i IN ('docker ps -q') DO docker stop %i

In Git Bash or Bash for Windows you can use this Linux command:

docker stop $(docker ps -q)

Note: this will fail if there are no containers running

For PowerShell, the command is very similar to the Linux one:

docker ps -q | % { docker stop $_ }

Solution 2:[2]

For those who are interested this can be accomplished in Powershell using

docker ps -q | % { docker stop $_ }

Solution 3:[3]

In PowerShell, you could also use this syntax

docker container stop $(docker container list -q)

Solution 4:[4]

If the motivation of the question is to recover the memory occupied by Docker (in my case, this was why I arrived at this page), I found that the only way was to stop Docker Desktop completely. You do that by right-clicking the whale icon in the notification area (bottom right) > Quit Docker Desktop. When you restart Docker Desktop, all the containers reappear, and Docker even sets them to up again automatically.

Solution 5:[5]

My two cents.

If you want to stop them filtered by some criteria

docker ps -a -q --filter "name=container_name" --format="{{.ID}}" | ForEach-Object -Process {docker stop $_ } 

or if you want to stop and remove them all together

docker ps -a -q --filter "name=container_name" --format="{{.ID}}" | ForEach-Object -Process {docker rm $_ -f}

By using pipe and foreach I avoid the error returned when there are no containers of this kind on the specific machine because docker stop or docker rm require at least one argument.

This script is used with combination of

docker container run image_tag --name=container_name

in order to use the filter later on when you want to stop and remove the containers.

Solution 6:[6]

docker stop $(docker ps -aq)

to stop all running containers.

docker rm $(docker ps -aq)

to delete all containers.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nick Tindle
Solution 2 greensmith
Solution 3 Luk Aron
Solution 4 Francis
Solution 5 Ognyan Dimitrov
Solution 6 Alexandre K.