Issa Fram
Issa Fram

Reputation: 2634

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?

Upvotes: 83

Views: 89308

Answers (6)

Luk Aron
Luk Aron

Reputation: 1415

In PowerShell, you could also use this syntax

docker container stop $(docker container list -q)

Upvotes: 12

Alexandre K.
Alexandre K.

Reputation: 31

docker stop $(docker ps -aq)

to stop all running containers.

docker rm $(docker ps -aq)

to delete all containers.

Upvotes: 1

huysentruitw
huysentruitw

Reputation: 28111

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 $_ }

Upvotes: 171

Francis
Francis

Reputation: 792

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.

Upvotes: 8

Ognyan Dimitrov
Ognyan Dimitrov

Reputation: 6251

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.

Upvotes: 3

greensmith
greensmith

Reputation: 643

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

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

Upvotes: 53

Related Questions