Getting docker build to show IDs of intermediate containers

Viewed 3416

I'm trying to learn docker but experience some discrepancies to what I've read in each tutorial:

When using the following command docker build -t my-app:1.0 . my build fails due to some error in my Dockerfile. Following this answer, I wanted to run the last intermediate container ID. Anyhow, in contrast to all tutorials I've seen so far, my console is not showing any intermediate container IDs: enter image description here

I'm running Docker 19 on Windows 10. How do I get the intermediate container IDs?

4 Answers

I had the same problem. Setting "buildkit" to false in ~/.docker/daemon.json (In Windows you should find daemon.json in C:\ProgramData\Docker\config) solved this for me:

    {
      "experimental": true,
      "features": {
        "buildkit": false
      }
    }

Since version 18.09 Docker has added a new backend for building images, buildkit. This offers a bunch of benefits but doesn't expose intermediate containers in the same way as the old backend. Fortunately you can disable buildkit.

You don't need to disable buildkit permanently for this and you shouldn't because it will make all your builds slower. You can just set an environment variable when you docker build, like this:

Powershell

$env:DOCKER_BUILDKIT=0; docker build .

Linux/macOS

DOCKER_BUILDKIT=0 docker build .

Windows cmd

set DOCKER_BUILDKIT=0& docker build .

Expanding the Answer of Michael, for anyone that may be a little bit lost. If you are using the docker desktop on windows, you can find this configuration of daemon.json inside the settings window under the "Docker Engine" tab. Change the json and Apply & Restart.

Settings window on the Docker Engine tab

I'm not sure of the reasoning exactly but with Buildkit you can no longer inspect at a particular cache layer like before. You just have to comment out where the RUN command is failing, get it to build successfully – then you can inspect it. A step backwards IMO. Even turning on --progress=plain puts out hashes, but you can't do anything with them. ie: trying to run docker run -ti [hash_id] sh fails as it can't find the image. It's that or you turn off buildkit, but the fact that it is both the default for macOS, and Windows suggests that changing the default of the daemon may not be good for future use.

Related