You can try and list only untagged images (ones with no labels, or with label with no tag):
docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'
However, some of those untagged images might be needed by others.
I prefer removing only dangling images:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
As I mentioned for for docker 1.13+ in Sept. 2016 in "How to remove old and unused Docker images", you can also do the image prune
command:
docker image prune
tansadio suggests:
docker images -a | grep none | awk '{ print $3; }' | xargs docker rmi --force
But, as noted by BryanK: make sure your repository name (or one of your tag names) does not have the sequence of characters 'none
' or those will match the regular expression and get removed too.
That being said, Janaka Bandara mentions in the comments:
This did not remove <none>
-tagged images for me (e.g. foo/bar:<none>
); I had to use docker images --digests
and docker rmi foo/bar@<digest>
Janaka references "How to Remove a Signed Image with a Tag" from Paul V. Novarese:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pvnovarese/mprime latest 459769dbc7a1 5 days ago 4.461 MB
pvnovarese/mprime <none> 459769dbc7a1 5 days ago 4.461 MB
Diagnostic Steps
You can see the difference in these two entries if you use the --digests=true
option (the untagged entry has the Docker Content Trust signature digest):
# docker images --digests=true
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
pvnovarese/mprime latest <none> 459769dbc7a1 5 days ago 4.461 MB
pvnovarese/mprime <none> sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00 459769dbc7a1 5 days ago
Note that Paul also mentions moby issue 18892:
After pulling a signed image, there is an "extra" entry (with tag <none>
) in "docker images
" output.
This makes it difficult to rmi
the image (you have to force it, or else first delete the properly-tagged entry, or delete by digest.
This thread also proposes:
First, you need to change the tag of the specific image you want to remove.
docker tag container_id repo_name:new_tag_name
# example
docker tag 1234567er34r davesaah/my-repo:old
Next, remove the image with the new tag created using docker rmi
docker rmi repo-name:tag
# using the previous example
docker rmi davesaah/my-repo:old
This will remove the dangling image that has dependent child images.