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.