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