Why is docker build not showing any output from commands?

DockerDocker Build

Docker Problem Overview


Snippet from my Dockerfile:

FROM node:12.18.0
RUN echo "hello world"
RUN psql --version

When I run docker build . I don't see any output from these two commands even if they are not cached. The documentation says that docker build is verbose by default. Why am I not seeing the output from commands? I used to see them before.

The output while building:

=> [7/18] RUN echo "hello worl"                         0.9s

The output I am seeing after building finishes:

=> CACHED [6/18] RUN apt-get install postgresql -y      0.0s
=> [7/18] RUN echo "HELLO world"                        6.4s
=> [8/18] RUN psql --version                           17.1s

The Dockerfile is created from node:12.18.0 which is based on Debian 9.

Docker version 19.03.13, build 4484c46d9d.

Docker Solutions


Solution 1 - Docker

The output you are showing is from buildkit, which is a replacement for the classic build engine that docker ships with. You can adjust output from this with the --progress option:

  --progress string         Set type of progress output (auto, plain, tty). Use plain to show container output
                            (default "auto")

Adding --progress=plain will show the output of the run commands that were no loaded from the cache.


If you don't want to use buildkit, you can revert to the older build engine by exporting DOCKER_BUILDKIT=0 in your shell, e.g.:

DOCKER_BUILDKIT=0 docker build ...

or

export DOCKER_BUILDKIT=0
docker build ...

Solution 2 - Docker

Just use this flag --progress=plain after build.

For example:

docker-compose build --progress=plain <container_name>

OR

docker build --progress=plain .

If you don't want to use this flag every time, then permanently tell docker to use this flag by doing:

export BUILDKIT_PROGRESS=plain

Here is the official documentation when you type docker build --help.

--progress string         Set type of progress output (auto, plain, tty). Use plain to show container output (default "auto")

Solution 3 - Docker

In Docker 20.10 i had to use the --no-cache flag, too. Otherwise cached output is not shown.

docker build --progress=plain --no-cache .

Solution 4 - Docker

As an alternative to specifying the --progress=plain option, you can also permanently disable the "pretty" output by setting this env variable in your shell config:

export BUILDKIT_PROGRESS=plain

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
QuestionNonameView Question on Stackoverflow
Solution 1 - DockerBMitchView Answer on Stackoverflow
Solution 2 - DockerAsh SinghView Answer on Stackoverflow
Solution 3 - DockervolkitView Answer on Stackoverflow
Solution 4 - DockerruoholaView Answer on Stackoverflow