docker inspect

描述返回 Docker 对象的低级信息
用法docker inspect [OPTIONS] NAME|ID [NAME|ID...]

描述

Docker inspect 提供了由 Docker 控制的构造的详细信息。

默认情况下,docker inspect 将以 JSON 数组形式呈现结果。

格式化输出 (--format)

如果指定了格式,则将对每个结果执行给定的模板。

Go语言的 text/template 包详细描述了该格式的所有细节。

指定目标类型 (--type)

--type container|image|node|network|secret|service|volume|task|plugin

docker inspect 命令通过 ID 或名称匹配任何类型的对象。在某些情况下,多种类型的对象(例如,容器和卷)具有相同的名称,从而导致结果具有歧义。

要将 docker inspect 限制为特定类型的对象,请使用 --type 选项。

下面的示例检查一个名为 myvolume 的卷。

$ docker inspect --type=volume myvolume

查看容器的大小 (-s, --size)

--size 或简写 -s 选项会向 docker inspect 输出添加两个额外的字段。此选项仅适用于容器。容器不必处于运行状态,对于已停止的容器同样有效。

$ docker inspect --size mycontainer

输出包括常规 docker inspect 命令的完整输出,以及以下附加字段:

  • SizeRootFs: 容器中所有文件的总大小,以字节为单位。
  • SizeRw: 容器与其镜像相比,已创建或更改的文件的大小,以字节为单位。
$ docker run --name database -d redis
3b2cbf074c99db4a0cad35966a9e24d7bc277f5565c17233386589029b7db273
$ docker inspect --size database -f '{{ .SizeRootFs }}'
123125760
$ docker inspect --size database -f '{{ .SizeRw }}'
8192
$ docker exec database fallocate -l 1000 /newfile
$ docker inspect --size database -f '{{ .SizeRw }}'
12288

选项

选项默认描述
-f, --format使用自定义模板格式化输出:
'json': 以 JSON 格式打印
'TEMPLATE': 使用给定的 Go 模板打印输出。
参考https://docs.docker.com/go/formatting/有关使用模板格式化输出的更多信息
-s, --size如果类型是容器,则显示文件总大小
--type返回指定类型的 JSON

示例

获取实例的 IP 地址

在大多数情况下,您可以以相当直接的方式从 JSON 中挑选出任何字段。

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID

获取实例的 MAC 地址

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID

获取实例的日志路径

$ docker inspect --format='{{.LogPath}}' $INSTANCE_ID

获取实例的镜像名称

$ docker inspect --format='{{.Config.Image}}' $INSTANCE_ID

列出所有端口映射

您可以遍历结果中的数组和映射来生成简单的文本输出:

$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID

查找特定端口映射

当字段名以数字开头时,.Field 语法不起作用,但模板语言的 index 函数可以。 .NetworkSettings.Ports 部分包含内部端口映射到外部地址/端口对象列表的映射。 要仅获取数字公共端口,您可以使用 index 查找特定的端口映射,然后 index 0 包含其中的第一个对象。 然后,指定 HostPort 字段以获取公共地址。

$ docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' $INSTANCE_ID

获取 JSON 格式的子部分

如果您请求的字段本身是一个包含其他字段的结构体,默认情况下您会获得内部值的 Go 风格转储。Docker 添加了一个模板函数 json,可以应用该函数以 JSON 格式获取结果。

$ docker inspect --format='{{json .Config}}' $INSTANCE_ID