tl;dr;
To run docker rmi
composed with grep
use following line:
docker images | grep none | tr -s " " | cut -d" " -f3 | xargs docker rmi -f
end tl;dr
At some day I run out of disk space. Disk analyzing tools such as baobab
and ncdu
shown enormous amounts of disk volume taken by /var/lib/docker
.
Lets check the images we have on machine:
docker images

Ok, a lot of images tagged as <none>
sized over 1GB
, and technically they are junk.
Here we can do docker system prune
. But there is a risk to remove needed images and I've a mood to do some sh
piping instead.
docker images | grep none

Looks better. Now lets select IMAGE_ID
field of em.
docker images | grep none | cut -f3 #wont work

And the selection by regular find
command failed, because docker uses precalculated amount of spaces
instead of tabs
. So here we can use tr
to remove trailing spaces and then use cut
with space
as delimiter:
docker images | grep none | tr -s " " | cut -d" " -f3
After getting a list of IMAGE_ID
s. We can pass them to docker rmi
as first argument using xargs
.
docker images | grep none | tr -s " " | cut -d" " -f3 | xargs docker rmi -f
Now all images tagged as <none>
are removed.
So what can I say. The same result was achieved by docker system prune
, but this was a good practice of sh
scripting for me.
Thanks for reading,
Happy Coding.