Why the "none" image appears in Docker and how can we avoid it

DockerDocker ComposeDockerfile

Docker 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 least v1.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; }')

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChen HanhanView Question on Stackoverflow
Solution 1 - DockertgogosView Answer on Stackoverflow
Solution 2 - DockerSnakEView Answer on Stackoverflow
Solution 3 - DockerPatrickView Answer on Stackoverflow
Solution 4 - DockerntippmanView Answer on Stackoverflow
Solution 5 - Dockerpinxau1000View Answer on Stackoverflow
Solution 6 - DockerGC001View Answer on Stackoverflow