如何使用 docker container inspect 命令查看容器详情

DockerBeginner
立即练习

介绍

在本实验中,你将学习如何使用 docker inspect 命令查看 Docker 容器的详细信息。你将探索如何检查运行中和已停止的容器,理解默认的 JSON 输出格式,并发现如何通过 Go 模板格式化输出来实现自定义视图。此外,你还将学习如何使用 docker inspect 命令显示容器的大小信息。

通过动手实践,你将获得使用 docker inspect 获取宝贵配置、状态和网络细节的实际经验,这对于故障排除和管理 Docker 环境至关重要。

检查运行中的容器

在这一步中,你将学习如何检查一个运行中的 Docker 容器。docker inspect 命令提供了关于容器的详细信息,包括其配置、网络设置和状态。

首先,让我们运行一个保持运行状态的简单容器。我们将使用 ubuntu 镜像,并执行一个让容器持续运行的命令。

docker run -d --name my-running-container ubuntu sleep infinity

在上面的命令中:

  • docker run:该命令用于运行一个新容器。
  • -d:该标志让容器在后台运行(detached 模式)。
  • --name my-running-container:为容器指定一个名称,便于后续引用。
  • ubuntu:这是我们使用的镜像。如果本地没有该镜像,Docker 会自动拉取。
  • sleep infinity:在容器内执行的命令,使容器无限期保持运行状态。

现在容器已经运行起来了,我们可以检查它。使用 docker inspect 命令后跟容器名称:

docker inspect my-running-container

该命令会输出一个大型 JSON 对象,包含关于 my-running-container 的所有详细信息。你可以滚动查看输出的各个部分,例如 IdStateConfigNetworkSettings 等。

为了使输出更易读或提取特定信息,你可以通过管道将输出传递给 jq(一个轻量级且灵活的命令行 JSON 处理器)等工具。但在本实验中,我们将专注于基础的 docker inspect 命令。

检查完容器后,你可以停止并删除它以清理环境:

docker stop my-running-container
docker rm my-running-container
  • docker stop my-running-container:该命令停止正在运行的容器。
  • docker rm my-running-container:该命令移除已停止的容器。

检查已停止的容器

在这一步中,你将学习如何检查当前未运行的容器。docker inspect 命令对运行中和已停止的容器都有效,可以获取它们的配置和最终状态信息。

首先,让我们运行一个会在短时间内退出的简单容器:

docker run --name my-stopped-container ubuntu sleep 5

在这个命令中:

  • docker run:运行一个新容器
  • --name my-stopped-container:为容器指定名称
  • ubuntu:使用的镜像
  • sleep 5:在容器内执行的命令,5 秒后容器将退出

等待几秒钟让容器执行完 sleep 5 命令并停止。你可以使用 docker ps -a 列出所有容器(包括已停止的)来验证容器状态:

docker ps -a

你应该能在列表中看到 my-stopped-container,其状态显示为已退出。

现在,你可以像上一步检查运行中容器那样,使用 docker inspect 命令检查已停止的容器:

docker inspect my-stopped-container

你将再次看到详细的 JSON 输出。注意 State 部分会显示容器的退出状态和完成时间等信息。

检查已停止的容器对于调试或理解容器退出的原因非常有用。

最后,清理已停止的容器:

docker rm my-stopped-container

以 JSON 格式输出检查结果

在这一步中,你将学习如何将 docker inspect 命令的输出格式化为 JSON 数组。这在同时检查多个对象(如容器或镜像)时特别有用,因为它提供了结构化的输出,便于其他工具或脚本解析。

首先,让我们运行两个保持运行状态的简单容器:

docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity

现在,我们同时检查这两个容器并将输出格式化为 JSON 数组。可以通过向 docker inspect 命令提供多个容器名称来实现:

docker inspect container1 container2

输出将是一个包含 container1container2 检查详情的 JSON 数组。数组中的每个元素对应一个容器的 JSON 对象。

这种格式是检查多个对象时的默认输出方式,是表示结构化数据列表的标准方法。

检查完成后,停止并移除这两个容器:

docker stop container1 container2
docker rm container1 container2

使用 Go 模板格式化检查输出

在这一步中,你将学习如何使用 Go 模板来格式化 docker inspect 命令的输出。这使你可以从详细的 JSON 输出中提取特定信息,并以自定义格式显示。

首先,让我们运行一个保持运行状态的容器:

docker run -d --name my-templated-container ubuntu sleep infinity

现在,我们来检查这个容器并使用 Go 模板仅显示其 IP 地址。IP 地址位于检查输出的 NetworkSettings.IPAddress 字段中:

docker inspect --format '{{.NetworkSettings.IPAddress}}' my-templated-container

在这个命令中:

  • --format '{{.NetworkSettings.IPAddress}}':这个标志使用 Go 模板指定格式
    • {{...}}:这些双花括号表示 Go 模板中的动作
    • .:表示被检查的根对象(容器)
    • NetworkSettings:访问根对象中的 NetworkSettings 字段
    • IPAddress:访问 NetworkSettings 对象中的 IPAddress 字段

该命令的输出将仅显示容器的 IP 地址。

你可以使用 Go 模板提取各种信息。例如,获取容器的名称和 ID:

docker inspect --format 'Name: {{.Name}}, ID: {{.Id}}' my-templated-container

这将输出类似 Name: /my-templated-container, ID: <container_id> 的内容。

Go 模板提供了强大的格式化功能,包括条件语句、循环和函数。不过在这个基础示例中,我们只是访问字段。

检查完成后,停止并移除容器:

docker stop my-templated-container
docker rm my-templated-container

显示容器大小信息

在这一步中,你将学习如何显示 Docker 容器的大小信息。这对于监控磁盘使用情况和了解容器的占用空间很有帮助。

默认情况下,docker ps 命令不会显示容器的大小。要包含大小信息,可以使用 --size-s 标志。

首先,让我们运行一个简单的容器:

docker run -d --name my-size-container ubuntu sleep infinity

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

docker ps --size

或者

docker ps -s

在输出中,你将看到一个额外的列 SIZE。该列显示两个值:

  1. 容器可写层的大小(自容器创建以来对其文件系统所做的更改)
  2. 容器的总大小,包括镜像层大小加上可写层大小

对于不写入太多数据的简单容器,可写层的大小通常很小。总大小会更大,因为它包含基础镜像的大小。

你也可以在列出所有容器(包括已停止的容器)时查看大小信息:

docker ps -a --size

这对于查看已退出但尚未移除的容器大小很有用。

理解容器大小对于管理 Docker 主机上的磁盘空间很重要。

最后,停止并移除容器:

docker stop my-size-container
docker rm my-size-container

总结

在本实验中,你学习了如何使用 docker inspect 命令查看 Docker 容器的详细信息。通过实践,你掌握了如何检查运行中和已停止的容器,了解到该命令无论容器处于何种状态都能提供全面的数据。

此外,你还探索了如何格式化 docker inspect 的输出,特别是以 JSON 格式输出完整详情,以及使用 Go 模板提取和显示特定信息。最后,你学会了如何使用 --size 标志在检查输出中包含容器大小信息。