查看容器的详细信息

深入容器内部:使用 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. 查看容器的网络配置信息:
网络信息通常嵌套在 NetworkSettingsNetworkSettings.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

请登录后发表评论

    没有回复内容