So, back in the Docker days, I wrote a basic little script called prune.sh which would ... prune containers that had exited: -
#!/usr/bin/env bash
echo "Removing Docker containers that have Exited"
docker rm `docker ps -a|grep Exited|awk '{print $1}'`
echo "Completed"
echo "Removing Docker containers that have Exited"
docker rm `docker ps -a|grep Exited|awk '{print $1}'`
echo "Completed"
so wanted to do much the same now I'm into podman
My starting position is that I've got two containers, one recently exited and one running: -
podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
413adb675c62 docker.io/library/hello-world:latest /hello 37 seconds ago Exited (0) 38 seconds ago 0.0.0.0:8080->8080/tcp hopeful_vaughan
408ce1f9513f us.icr.io/demo_time/hello_world_nginx_june_2021:latest nginx -g daemon o... 32 seconds ago Up 32 seconds ago 0.0.0.0:8443->443/tcp zealous_brattain
so I want to remove them both.
Now obviously I don't want to be bother typing in the container ID or name, so lets just get a list of the IDs: -
podman ps -a | grep -v CONTAINER | awk '{print $1}'
413adb675c62
408ce1f9513f
and then use that in a loop to remove the unwanted containers: -
for i in $(podman ps -a | grep -v CONTAINER | awk '{print $1}'); do podman rm $i; done
413adb675c62
Error: cannot remove container 408ce1f9513f8056497d9e6353dd9b210c59d38eafe30c698f202ba6f240babe as it is running - running or paused containers cannot be removed without force: container state improper
so that's a 50% success.
Perhaps I need to add in a podman stop before the podman rm like this: -
podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
408ce1f9513f us.icr.io/demo_time/hello_world_nginx_june_2021:latest nginx -g daemon o... 7 minutes ago Exited (0) 49 seconds ago 0.0.0.0:8443->443/tcp zealous_brattain
43a6797e1036 docker.io/library/hello-world:latest /hello About a minute ago Exited (0) About a minute ago 0.0.0.0:8080->8080/tcp hopeful_robinson
for i in $(podman ps -a | grep -v CONTAINER | awk '{print $1}'); do podman stop $i && podman rm $i; done
408ce1f9513f
408ce1f9513f
43a6797e1036
43a6797e1036
podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
I can do much the same for the images, if I want my prune to be really really ruthless: -
for i in $(podman images | grep -v REPOSITORY | awk '{print $1}'); do podman rmi $i; done
Untagged: docker.io/library/hello-world:latest
Deleted: feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Untagged: us.icr.io/demo_time/hello_world_nginx_june_2021:latest
Deleted: c5318a40be88ede4e70c8c11f552a765c1c8aa5965ebd428da0b4766c2546968
So here's my final script: -
#!/usr/bin/env bash
echo "Removing containers"
for i in $(podman ps -a | grep -v CONTAINER | awk '{print $1}'); do podman stop $i && podman rm $i; done
echo "Removing images"
for i in $(podman images | grep -v REPOSITORY | awk '{print $1}'); do podman rmi $i; done
echo "Done"
~/prune.sh
Removing containers
854a1937c347
854a1937c347
ERRO[12181] accept tcp [::]:8443: use of closed network connection
95ef5827777e
95ef5827777e
Removing images
Untagged: docker.io/library/hello-world:latest
Deleted: feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Untagged: us.icr.io/demo_time/hello_world_nginx_june_2021:latest
Deleted: c5318a40be88ede4e70c8c11f552a765c1c8aa5965ebd428da0b4766c2546968
Done
podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
No comments:
Post a Comment