Why the "none" image appears in Docker and how can we avoid it
DockerDocker ComposeDockerfileDocker Problem Overview
When I run the docker-compose build
command to rebuild an image in Docker because I had changed something in Dockerfile, sometimes I get "none" image tags. How can we avoid this fact? I want to rebuild the image but the none image should not appear.
REPOSITORY TAG IMAGE ID CREATED SIZE
magento2 latest b4dce4dcbd4f 16 hours ago 516MB
<none> <none> b4ffce2bf91e 16 hours ago 519MB
<none> <none> a1aedb60c82a 17 hours ago 516MB
<none> <none> ec9a14ae856c 20 hours ago 519MB
<none> <none> ef8eba6874cc 23 hours ago 516MB
<none> <none> 0e53a8b8c303 23 hours ago 516MB
php 7.1-apache 93e6fb4b13e1 3 weeks ago 369MB
mysql 5.6.39 079344ce5ebd 7 months ago 256MB
Docker Solutions
Solution 1 - Docker
Below are some parts from What are Docker <none>:<none>
images?
> ### The Good <none>:<none>
> These are intermediate images and can be seen using docker images -a
. They don't result into a disk space problem but it is definitely a screen "real estate" problem. Since all these <none>:<none>
images can be quite confusing as what they signify.
>
> ### The Bad <none>:<none>
> These images are the dangling ones, which can cause disk space problems. These <none>:<none>
images are being listed as part of docker images
and need to be pruned.
>
> (a dangling file system layer in Docker is something that is unused and is not being referenced by any images. Hence we need a mechanism for Docker to clear these dangling images)
So,
-
if your case has to do with
dangling
images, it's ok to remove them with:docker rmi $(docker images -f "dangling=true" -q)
There is also the option of
docker image prune
but the client and daemon API must both be at leastv1.25
to use this command. -
if your case has to do with
intermediate
images, it's ok to keep them, other images are pointing references to them.
Related documentation:
Solution 2 - Docker
In my experience most of the <none>
images are held by temporary containers. Due to Docker architecture those containers are preserved even after they stop. You can verify how many stopped containers you have using
docker ps -a
So to remove the <none>
images you first need to remove the unneeded containers:
docker container prune
docker image prune
The above two commands can be abbreviated to
docker system prune
Solution 3 - Docker
There is little to add based on what @tgogos said except that it needs more upvoting.
You can check image sizes of dangling and non-dangling images here:
docker system df -v
Don't be bugged by intermediate images. This way you oversee that the build process has been made more efficient by keeping intermediate images for each line of a Dockerfile, i.e. such a line can be skipped during the build process if no change occurred.
Solution 4 - Docker
To remove <none>
layers use:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
Solution 5 - Docker
This will remove all dangling docker images in Windows:
for /f %x in ('docker images -f "dangling=true" -q') do docker rmi %x
Solution 6 - Docker
You can remove dangling images using
docker rmi $(docker images -f "dangling=true" | grep "<none>.*<none>" | awk '{ print $3; }')