如何使用 docker buildx history logs 命令查看构建日志

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker buildx history logs 命令查看 Docker 构建日志。首先,你将构建一个 Docker 镜像并检查其历史记录,以了解构建过程并识别构建引用(build reference)。

接着,你将使用该构建引用来检索并查看特定构建的详细日志。最后,你将探索如何通过不同的进度输出类型查看这些构建日志,从而深入了解构建执行情况并排查潜在问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/logs -.-> lab-555052{{"如何使用 docker buildx history logs 命令查看构建日志"}} docker/images -.-> lab-555052{{"如何使用 docker buildx history logs 命令查看构建日志"}} docker/build -.-> lab-555052{{"如何使用 docker buildx history logs 命令查看构建日志"}} end

构建镜像并查看其历史记录

在本步骤中,你将学习如何通过 Dockerfile 构建 Docker 镜像并查看其历史记录。历史记录显示了构成镜像的各层以及用于创建每层的命令。

首先,在你的 ~/project 目录下创建一个简单的 Dockerfile。该 Dockerfile 将基于 ubuntu 镜像创建一个安装了 curl 包的镜像。

cd ~/project
nano Dockerfile

将以下内容添加到 Dockerfile 中:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl

保存文件并退出编辑器(按 Ctrl+X,输入 Y,然后按 Enter)。

现在,让我们使用 docker build 命令构建 Docker 镜像。我们将为镜像打上 my-ubuntu-curl 名称和 latest 标签。命令末尾的 . 表示 Dockerfile 位于当前目录。

docker build -t my-ubuntu-curl:latest .

你将看到显示构建过程的输出,其中会执行 Dockerfile 中定义的每个步骤。

构建完成后,你可以使用 docker history 命令查看镜像的历史记录。

docker history my-ubuntu-curl:latest

输出将显示一个表格,包含各层的信息,包括层 ID、创建时间、大小以及用于创建该层的命令。这些历史记录对于理解镜像的构建方式和调试非常有用。

从历史记录中查找构建引用

在上一步中,你构建了 Docker 镜像并查看了其历史记录。历史记录输出包含一个「BUILD REFERENCE」列。这个引用是创建该镜像的构建过程的唯一标识符,它不同于镜像 ID,专门与构建过程本身相关,而非最终的镜像层。

让我们再次查看历史记录以确定构建引用。

docker history my-ubuntu-curl:latest

在输出中,找到与构建过程对应的行。通常是第一行(不包括基础镜像层),且「BUILD REFERENCE」列会有值。这个值是一个长字符串。

例如,输出可能类似这样(具体值会有所不同):

IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT   BUILD REFERENCE
a1b2c3d4e5f6   2 hours ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
g7h8i9j0k1l2   2 hours ago    /bin/sh -c #(nop) ADD file:abcdef1234567890...   73.9MB
m3n4o5p6q7r8   2 hours ago    /bin/sh -c apt-get update && apt-get install...   30MB      buildkit.dockerfile.v0   buildkit:abcdef1234567890abcdef1234567890

在这个例子中,构建引用是 buildkit:abcdef1234567890abcdef1234567890。注意构建引用通常以 buildkit: 开头,后跟唯一标识符。

在下一步中查看特定构建过程的日志时,你将需要这个构建引用。请从你的输出中复制这个构建引用。

使用构建引用查看特定构建的日志

在上一步中,你从镜像历史记录中获取了构建引用。这个构建引用可以让你查看该特定构建过程的详细日志,对于调试构建失败或了解构建过程中产生的确切输出特别有用。

要查看特定构建的日志,你需要使用 docker buildx logs 命令并跟上构建引用。请记得将 YOUR_BUILD_REFERENCE 替换为你在上一步中找到的实际构建引用。

docker buildx logs YOUR_BUILD_REFERENCE

例如,如果你的构建引用是 buildkit:abcdef1234567890abcdef1234567890,那么命令应该是:

docker buildx logs buildkit:abcdef1234567890abcdef1234567890

执行此命令将显示构建过程的完整输出,包括 Dockerfile 中每个 RUN 指令的执行结果。你将看到 apt-get updateapt-get install -y curl 在镜像构建时的实际输出。

相比 docker build 命令显示的摘要信息,这能提供更详细的构建过程视图。

查看不同进度输出类型的日志

在本步骤中,你将探索构建 Docker 镜像时查看构建进度输出的不同方式。docker build 命令提供了多种选项来控制构建进度的显示方式。

默认情况下,docker build 使用进度输出显示每个步骤的执行状态。让我们重新构建镜像以再次查看这个默认输出。

docker build -t my-ubuntu-curl:latest .

你将看到熟悉的输出,显示如 "Step 1/2"、"Step 2/2" 等步骤以及 RUN 命令的输出。

现在,让我们尝试使用 --progress 标志的不同进度输出类型。plain 输出类型以更详细的逐行格式显示构建过程,有助于查看正在运行的确切命令及其输出,而不显示进度条。

docker build --progress=plain -t my-ubuntu-curl:latest .

将此命令的输出与默认输出进行比较。你将看到构建过程中每个操作的更详细日志。

另一个有用的进度输出类型是 tty。这是在终端中交互式构建时的默认设置,提供动态进度条。但在某些脚本场景中显式指定它可能很有用。

docker build --progress=tty -t my-ubuntu-curl:latest .

你应该会再次看到交互式进度条,与初始构建类似。

了解这些不同的进度输出类型可以让你选择最适合监控 Docker 构建的方式,无论是需要简洁的摘要还是用于调试的详细日志。

总结

在本实验中,你学习了如何使用 docker builddocker history 命令从 Dockerfile 构建 Docker 镜像并查看其历史记录。你创建了一个简单的 Dockerfile,构建了标记为 my-ubuntu-curl:latest 的镜像,并通过检查历史记录输出来理解构建过程中涉及的各个层和命令。

随后,你学会了如何从 docker history 输出中识别唯一的构建引用。这个构建引用对于访问特定构建相关信息(如构建日志)至关重要,你将在后续步骤中进一步探索这些内容。