You might have encountered a situation where you cannot build the latest Docker image when using the Buildx. If so, you may find this article helpful to give you a little insight into your question, “Why I keep seeing the stale image in the list!”.

What I tried was building the Docker image supporting ARM64 architecture. To achieve my goal, it requires me to enable Buildx experimental feature of Docker. It allows us to build a Docker image supporting multiple architectures. When I have found a problem in the image, I wanted to change the Dockerfile to reflect the fix I applied. But it failed. As shown in the following output, the CREATED time of the images keeps the past time even I have created just a few seconds before.

$ docker images
REPOSITORY                                                    TAG                      IMAGE ID            CREATED             SIZE
presto                                                        341-SNAPSHOT             c15822305160        5 hours ago         1.05GB
lewuathe/presto-worker                                        341-SNAPSHOT             eb1d11521b04        5 hours ago         1.38GB
lewuathe/presto-coordinator                                   341-SNAPSHOT             8e0085374165        5 hours ago         1.38GB

That’s was so annoying that I could not test my fix was adequately resolving the issue. Here are two options to overcome this stressful situation.

Build without any cache

As well as normal build command, buildx also provides --no-cache option. It enables us to build an image from scratch. The latest image will be created for sure.

$ docker buildx build \
    --no-cache \ # Without using cache
    --platform linux/arm64/v8 \
    -f Dockerfile-arm64v8 \
    -t lewuathe/prestobase:340-SNAPSHOT-arm64v8

Clearing the cache completely

Another option is clearing the cache. However, it has a side-effect affecting other image build time. Since removing all layer caches, it can make the build time for other images longer. But if the images you are holding is not so many, deleting the cache can be a reasonable option.

The builder instance holds the cache. The following command will clear the cache hold by all builders.

$ docker builder prune --all

Afterward, you can build the image as usual. We can see the build time is refreshed as follows.

$ docker images
REPOSITORY                                                    TAG                      IMAGE ID            CREATED             SIZE
presto                                                        341-SNAPSHOT             c15822305160        a second ago        1.05GB
lewuathe/presto-worker                                        341-SNAPSHOT             eb1d11521b04        a second ago        1.38GB
lewuathe/presto-coordinator                                   341-SNAPSHOT             8e0085374165        a second ago        1.38GB

To learn the practical techniques of Docker, you may find the following guide from Manning useful. Docker has many options or configurations. If you know these details, Docker will be more attentive tool for you.

Thanks for reading as usual!

References