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.