How to take actions on multiple docker containers at once
Again, please tell me if there is a better way to do this.
While testing docker, frequently I need to start/stop/rm containers. I got real sick of having to ls them and copy paste the container ID.
Using this alias, I just have to remember a single part of the name of the container, and I will get the container IDs that can then be included as part of another command:
$ alias dcl='_dcl(){ docker container ls -aq -f name="$1";}; _dcl'
$ dcl snikket
b3fcbc808cc9
1947885fbb24
054d67d2e8b9
d8fe9df5f61f
So now that I'm getting a list of IDs, I can easily, for example, pause all of them:
$ docker container pause $( dcl snikket )
Error response from daemon: container is not running
Error response from daemon: container is not running
Error response from daemon: container is not running
Error response from daemon: container is not running
The containers weren't actually running, but this shows the alias working.
I don't know if this works in docker (usually there is 1:1 equivalency between the two), but with podman you can do something like:
podman stop --filter name=foo
man podman-stop tells us:
--filter, -f=filter
Filter what containers are going to be stopped. Multiple filters can be given with multiple uses of the --filter flag. Filters with the same key work
inclusive with the only exception being label which is exclusive. Filters with different keys always work exclusive.
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
Options:
-s, --signal string Signal to send to the container
-t, --time int Seconds to wait before killing the container