深入容器内部:使用 docker inspect
查看详细信息
除了 docker ps
提供的概览信息外,有时我们需要获取关于容器更底层、更详细的数据,例如其在宿主机上的进程 ID (PID)、完整的容器 ID、网络配置(IP 地址、网关、MAC 地址)等。这时,docker inspect
命令就派上了用场。
docker inspect
可以返回有关 Docker 对象(包括容器、镜像、网络、卷等)的低级信息,默认输出为 JSON 格式。由于输出信息非常庞大,通常我们会结合 -f
或 --format
选项,使用 Go 语言的模板语法来提取我们感兴趣的特定字段。
基本语法:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
常用 -f
模板占位符示例:
1. 查看容器主进程在宿主机上的 PID:
每个运行中的容器,其主进程在宿主机上都有一个对应的 PID。
# 获取名为 c1 的容器的主进程 PID
root@docker102:~# docker container inspect -f "{{ .State.Pid }}" c1
16425
这里的 {{ .State.Pid }}
指向 JSON 输出中 State
对象下的 Pid
字段。这个 PID 对于在宿主机上进行性能分析或调试非常有用。
2. 查看容器的完整 ID:
docker ps
通常显示的是容器 ID 的缩写,docker inspect
可以获取完整的 64 位十六进制 ID。
# 获取名为 c1 的容器的完整 ID
root@docker102:~# docker container inspect -f "{{ .Id }}" c1
9f04196922621ea548d4cd9058f4fa77674ef380ac62156663bd066018f9e66a
3. 查看容器的网络配置信息:
网络信息通常嵌套在 NetworkSettings
或 NetworkSettings.Networks
下。
-
获取 IP 地址 (简单方式,适用于默认 bridge 网络):
# .NetworkSettings.IPAddress 是一个顶层字段,通常指向默认网络的 IP root@docker102:~# docker container inspect -f "{{ .NetworkSettings.IPAddress }}" c1 172.17.0.3
注意:当容器连接到多个网络时,此字段可能为空或仅显示其中一个网络的 IP。
-
获取特定网络的 IP 地址 (更精确):
Docker 容器可以连接到多个网络。NetworkSettings.Networks
是一个包含所有网络连接信息的对象。你需要指定网络名称(如默认的bridge
)来获取该网络的 IP。# 获取 c1 在 'bridge' 网络上的 IP 地址 root@docker102:~# docker container inspect -f "{{ .NetworkSettings.Networks.bridge.IPAddress }}" c1 172.17.0.3
-
遍历所有网络获取 IP 地址 (通用方式):
使用range
关键字可以遍历容器连接的所有网络,并提取信息。这在不确定网络名称或容器连接多网络时非常有用。# 获取 c1 连接的所有网络的 IP 地址 (如果只有一个网络,则只输出一个) root@docker102:~# docker container inspect -f "{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{end}}" c1 172.17.0.3
-
获取网关和 MAC 地址:
同样可以使用range
来获取每个网络的网关和 MAC 地址。# 获取 c1 连接的所有网络的网关地址 root@docker102:~# docker container inspect -f "{{ range .NetworkSettings.Networks }}{{ .Gateway }}{{end}}" c1 172.17.0.1 # 获取 c1 连接的所有网络的 MAC 地址 root@docker102:~# docker container inspect -f "{{ range .NetworkSettings.Networks }}{{ .MacAddress }}{{end}}" c1 02:42:ac:11:00:03
技巧彩蛋:查看最近创建容器的 IP 地址
在脚本或快速操作中,有时需要获取刚刚创建的那个容器的 IP。可以结合 docker ps -lq
(获取最后一个创建容器的 ID) 和 docker inspect
来实现:
# 获取最近创建容器的 IP 地址
docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" `docker container ps -lq`
# 或者使用 $(...) 语法,效果相同
docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" $(docker container ps -lq)
这个命令首先通过 docker ps -lq
获取到最新创建容器的 ID,然后将其作为参数传递给 docker inspect
,并格式化输出其 IP 地址。
通过 docker inspect
和灵活的 --format
选项,我们可以精确地提取所需的容器底层信息,这对于自动化脚本、监控集成以及深度问题排查都非常有价值。
(将这部分内容整合到之前的博客文章中,可以放在介绍完 docker ps
之后,或者作为一个独立的“高级技巧”部分。)
来源链接:https://www.cnblogs.com/leojazz/p/18807714
没有回复内容