为什么 docker build 没有显示命令的任何输出?

Why is docker build not showing any output from commands?

来自我的 Dockerfile 的片段:

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

当我 运行 docker build . 我看不到这两个命令的任何输出,即使它们没有被缓存。文档说 docker build 默认情况下是冗长的。为什么我看不到命令​​的输出?我以前见过他们。

构建时的输出:

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

构建完成后我看到的输出:

=> 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

Dockerfile 是从 node:12.18.0 创建的,它基于 Debian 9.

Docker 版本 19.03.13,内部版本 4484c46d9d。

您显示的输出来自 buildkit,它是 docker 附带的经典构建引擎的替代品。您可以使用 --progress 选项调整输出:

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

添加 --progress=plain 将显示未从缓存中加载的 运行 命令的输出。


如果您不想使用 buildkit,可以通过在 shell 中导出 DOCKER_BUILDKIT=0 来恢复到旧的构建引擎,例如:

DOCKER_BUILDKIT=0 docker build ...

export DOCKER_BUILDKIT=0
docker build ...

只需在 build 之后使用此标志 --progress=plain

例如:

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

docker build --progress=plain .

如果你不想每次都使用这个标志,那么永久地告诉 docker 使用这个标志,方法是:

export BUILDKIT_PROGRESS=plain

这里是你输入docker build --help时的官方文档。

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

作为指定 --progress=plain 选项的替代方法,您还可以通过在 shell 配置中设置此环境变量来永久禁用“漂亮”输出:

export BUILDKIT_PROGRESS=plain

在 Docker 20.10 中,我也必须使用 --no-cache 标志。否则不会显示缓存的输出。

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