Can not remove images even though no container is running

I had multiple stopped containers and images in my machine.
I wanted to clean up and removed all containers:
docker ps -a returns nothing.
I run docker rmi $(docker images -q) to remove the cached images but I get:

Error response from daemon: conflict: unable to delete ... (must be forced) - image is referenced in multiple repositories

What repositories is it talking about?


Solution 1:

You cannot remove images having multiple repositories without the force modifier, see Docker docs for more info.

docker images
REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB

If you want to do it manually, instead of using the image id to remove the images, you must remove the repository/tag that you don't need using image names:

docker rmi a8e6fa672e89
Error response from daemon: conflict: unable to delete a8e6fa672e89 (must be forced) - image is referenced in multiple repositories

Remove the repository/tag you don't need:

docker rmi repository/image-name:tag
Untagged: repository/image-name:tag
Untagged: repository/image-name:tag@sha256:64b5a02e2bb3ee4d4b7c0982e8e2e5eb68bdfd0fb096fce22b6c030dafb53a33

(Repeat last step until only one repository/tag remains) And now you will be able to remove the image:

docker rmi a8e6fa672e89
Untagged: repository2/image-name:tag
Deleted: sha256:a8e6fa672e89b399bd3ac52b96c031e6816a69191d1fd7e6a1839fd643e3c751
Deleted: sha256:9861dd7b5783217515f571fdcfa6729e1e38af3ae9c971026e5a317b12fc5905

If you use the -f flag and specify the image’s short or long ID, then rmi untags and removes all images that match the specified ID.

Solution 2:

The "repositories" it is talking about is part of the first column of a docker images:

docker images
REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB

(I take the samples which Gabriel showed in his answer)

Here we have two repositories: "repository" and "repository2". As you also can see, both images have the same IMAGE ID.

A docker images -q lists all available IMAGE ID's. Thus if you want to remove an IMAGE ID which is referenced by two images you get the error that you have mentioned.

Solution: You can remove the image by its name instead of its ID:

docker rmi repository/image-name:tag