'What are <none> repository and tags? Why do they appear when I use docker build?

This is what docker images shows before I run docker build.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myapp               latest              a38da0bd9e0b        6 seconds ago       523.8 MB
golang              onbuild             b4997c557048        10 days ago         517.2 MB

After I make some changes to the myapp source code, I run docker build -t myapp . and I end up with images named <none>.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED                      VIRTUAL SIZE
myapp               latest              a38da0bd9e0b        Less than a second ago ago   523.8 MB
<none>              <none>              e4209f97e819        10 minutes ago               523.8 MB
golang              onbuild             b4997c557048        10 days ago                  517.2 MB

I know I can remove them with docker rmi <IMAGE ID>, but why does that happen in the first place? How can I prevent that from happening? The Dockerfile I'm building looks like this.

FROM golang:onbuild
EXPOSE 8080


Solution 1:[1]

If you reassign a tag or image name to another image, your image will lose its tag or name. It's really that simple. Your myapp repo image tagged latest with ID a38da0bd9e0b used to be named and tagged on image ID e4209f97e819.

Solution 2:[2]

You aren't setting up the tag right in the build command. Try:

docker build -t repo/stuff:tag .

This will work if your Dockerfile is named "Dockerfile" and you're in the directory you want to build from.

When you run docker image list it'll show repo/stuff as the repository and tag as the TAG

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 L0j1k
Solution 2 Jacob Waters