Docker Tip #83: Stop Docker Containers by Name Using Patterns
Docker makes it easy to stop containers by a specific container name, but here's how you can stop containers by a wild card pattern.
I had this recently come up on a server where I wanted to stop a bunch of containers that all started with a specific name, but I didn’t want to stop every container on the system.
We’re all aware of the
docker container stop command which allows us to do things like
docker container stop hello to stop a container that is named
hello. It also supports stopping more than 1 container at a time if you separate each name or ID by a space. That gets us a third of the way there.
The next step is to get a list of running container IDs that we want to stop – ideally, we want to get this list of container IDs by supplying a wild card pattern to match on.
We can do that by running
docker container ls -q --filter name=myapp* where
myapp is the pattern we want to match. That will get all running containers whose names start with
myapp and thanks to
-q (quiet) it will return only the IDs. By the way, you can change that to
*myapp to get containers that end with
myapp or use
* anywhere in between.
The last piece of the puzzle is to combine both commands together. Fortunately with Bash that’s really easy to do with sub-shells.
We can feed the output of the
docker container ls command into
docker container stop by running
docker container stop $(docker container ls -q --filter name=myapp*).
Note: if you run the command and
ls finds no matches, you will get a
"docker container stop" requires at least 1 argument error from Docker, which is normal. That just means no IDs were passed into the
stop command since no containers were found.