如何使用 docker inspect 命令获取详细信息

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何有效地使用 docker inspect 命令来获取 Docker 对象的详细信息,特别关注容器。你将从检查一个容器开始,并理解该命令提供的全面默认 JSON 输出。

在此基础上,你将探索如何使用 Go 模板来格式化输出,以提取特定的数据点,例如容器的 IP 地址。本实验还将介绍如何检查容器的大小,并演示如何检查除容器之外的不同类型的 Docker 对象。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} docker/ps -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} docker/inspect -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} docker/pull -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} docker/images -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} docker/volume -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} docker/network -.-> lab-555165{{"如何使用 docker inspect 命令获取详细信息"}} end

检查容器并理解默认输出

在这一步中,你将学习如何检查 Docker 容器并理解默认输出。docker inspect 命令提供有关 Docker 对象的详细信息,这些对象包括容器、镜像、网络和卷。默认情况下,它会返回一个包含配置细节、状态和其他元数据的 JSON 数组。

首先,让我们拉取一个简单的镜像来进行操作。我们将使用 hello-world 镜像。

docker pull hello-world

你应该会看到表明镜像正在被拉取和提取的输出。

现在,让我们使用这个镜像运行一个容器。

docker run hello-world

这个命令会运行 hello-world 容器,该容器会打印一条消息然后退出。

要检查刚刚运行的容器,你需要它的 ID 或名称。你可以使用 docker ps -a 来查找最后退出的容器的 ID。

docker ps -a

查找使用 hello-world 镜像的容器,并复制其容器 ID。

现在,使用 docker inspect 命令,后面跟上你刚刚复制的容器 ID。将 <container_id> 替换为实际的 ID。

docker inspect <container_id>

这个命令将输出一个大型的 JSON 文档,其中包含有关该容器的详细信息。这个默认输出包含了广泛的数据,例如容器的状态、配置、网络设置和挂载的卷。理解这个输出对于调试和管理容器至关重要。

滚动查看输出,了解可用的信息。你会看到像 IdStateCreatedPathArgsConfigNetworkSettings 等字段。

格式化输出以获取特定信息

在上一步中,你看到 docker inspect 以 JSON 格式提供了大量信息。通常,你只需要特定的信息片段。Docker 允许你使用 --format 标志和 Go 模板来格式化输出。

让我们来获取一个运行中容器的 IP 地址。首先,我们需要一个运行中的容器。为此,我们将使用一个简单的 nginx 容器。

拉取 nginx 镜像:

docker pull nginx

以分离模式 (-d) 运行一个 nginx 容器,使其在后台运行:

docker run -d nginx

这个命令将输出容器 ID。复制这个 ID。

现在,让我们使用带有 --format 标志的 docker inspect 来获取容器的 IP 地址。将 <container_id> 替换为你正在运行的 nginx 容器的 ID。

docker inspect --format='{{.NetworkSettings.IPAddress}}' <container_id>

--format 标志使用 Go 模板语法。. 表示顶级 JSON 对象。我们使用点符号来遍历 JSON 结构:.NetworkSettings 访问 NetworkSettings 对象,而 .IPAddress 访问 NetworkSettings 中的 IPAddress 字段。双花括号 {{ }} 表示一个 Go 模板操作。

你应该会看到容器的 IP 地址被打印到控制台。

你可以类似地提取其他信息。例如,要获取容器的状态:

docker inspect --format='{{.State.Status}}' <container_id>

这将输出容器的当前状态(例如,"running")。

要获取容器的名称:

docker inspect --format='{{.Name}}' <container_id>

这将输出容器的名称(例如,/vigilant_goldberg)。

你还可以在格式字符串中组合多个字段。例如,要获取容器 ID 及其状态:

docker inspect --format='ID: {{.Id}}, Status: {{.State.Status}}' <container_id>

这将以更易读的格式打印出 ID 和状态。

尝试使用上一步中看到的 JSON 输出中的不同字段,以提取你需要的信息。

检查容器的大小

在这一步中,你将学习如何检查 Docker 容器的大小。了解容器大小对于管理磁盘空间和优化镜像构建非常重要。

docker inspect 命令可以提供有关容器大小的信息,但查看运行中容器大小的更直接方法是使用带有 --size 标志的 docker ps 命令。

首先,确保你有一个正在运行的容器。如果你在上一步中运行的 nginx 容器仍在运行,你可以使用它。如果没有,请再次运行它:

docker run -d nginx

现在,列出正在运行的容器并包含它们的大小信息:

docker ps --size

你会看到一个额外的列,标记为 SIZE。此列显示两个值:虚拟大小和磁盘上的大小。

  • 虚拟大小:这是容器镜像层的总大小加上容器可写层的大小。
  • 大小:这是容器可写层在磁盘上的大小。该层包含自容器启动以来对其文件系统所做的所有更改。

对于已退出的容器,你可以使用 docker ps -a --size 来查看它们的大小。

docker ps -a --size

你还可以使用 docker inspect 并格式化输出来获取大小信息。大小信息可在 .SizeRw(可写层的大小)和 .SizeRootFs(包括镜像层的总大小)下找到。

<container_id> 替换为你的一个容器的 ID:

docker inspect --format='Writable Layer Size: {{.SizeRw}}, Total Size: {{.SizeRootFs}}' <container_id>

此命令将输出可写层的大小和容器根文件系统的总大小。

理解虚拟大小和磁盘上的大小之间的差异很重要。虚拟大小包括共享的镜像层,而运行中容器在磁盘上的大小主要反映了写入该特定容器可写层的唯一数据。

检查特定类型的对象

在前面的步骤中,你对容器使用了 docker inspect 命令。然而,docker inspect 是一个通用的命令,可用于检查各种 Docker 对象,包括镜像、网络和卷。

要检查容器以外的对象,你需要在对象的名称或 ID 之前指定对象类型。语法为 docker inspect <object_type> <object_name_or_id>

让我们来检查你之前拉取的 nginx 镜像。

首先,列出你的镜像以获取镜像 ID 或名称:

docker images

找到 nginx 镜像,并记录其 REPOSITORY、TAG 或 IMAGE ID。

现在,检查 nginx 镜像。你可以使用镜像名称和标签(例如 nginx:latest)或镜像 ID。将 <image_name_or_id> 替换为相应的值。

docker inspect image <image_name_or_id>

这将输出关于 nginx 镜像的详细信息,包括其层、配置和元数据。注意,输出的结构与检查容器时不同,因为它反映的是镜像的属性。

接下来,让我们检查一个 Docker 网络。Docker 会创建默认网络。你可以使用 docker network ls 列出它们。

docker network ls

你可能会看到像 bridgehostnone 这样的网络。让我们检查 bridge 网络。

docker inspect network bridge

这个命令将显示关于 bridge 网络的详细信息,包括其配置、连接的容器和 IP 地址信息。

最后,让我们检查一个 Docker 卷。如果你没有任何卷,可以创建一个。

docker volume create myvolume

现在,检查你刚刚创建的卷。

docker inspect volume myvolume

这将显示关于 myvolume 的信息,例如其驱动程序、挂载点和作用域。

通过指定对象类型(containerimagenetworkvolume 等),你可以使用 docker inspect 来获取 Docker 环境中不同组件的详细信息。

总结

在本次实验中,你学习了如何使用 docker inspect 命令来获取 Docker 容器的详细信息。你首先对一个容器进行了检查,并了解了默认的全面 JSON 输出,该输出提供了广泛的配置和状态细节。

随后,你探索了如何使用 --format 标志和 Go 模板来格式化输出,以提取特定信息,例如容器的 IP 地址。这展示了 docker inspect 在根据你的需求定制输出方面的灵活性。