docker容器inspect内容NetworkSettings的使用

 更新时间:2026年02月03日 10:09:02   作者:岳来  
文章主要介绍了Docker容器的网络设置,包括默认bridge网络和多网络连接的配置,详细解释了顶层字段(如Bridge、SandboxID、HairpinMode等)以及Networks对象的使用方法,推荐使用Networks对象来获取容器的网络信息,因为它提供了更灵活和全面的配置选项

docker inspectNetworkSettingsNetworkSettings

  • 顶层字段(Legacy / Global):主要适用于默认 bridge 网络(即 docker run 未指定 --network 时)。
  • Networks 对象:包含容器连接的每个网络的详细配置(支持多网络)。

一、示例

$ docker inspect 9045fd6a4335 | jq '.[0].NetworkSettings'
{
  "Bridge": "",
  "SandboxID": "71132bcfbb0f31622aecfd17c7f7d6a257ceaa0dcf935c0edabfabf05df6b4bf",
  "HairpinMode": false,
  "LinkLocalIPv6Address": "",
  "LinkLocalIPv6PrefixLen": 0,
  "Ports": {
    "80/tcp": [
      {
        "HostIp": "0.0.0.0",
        "HostPort": "8080"
      }
    ]
  },
  "SandboxKey": "/var/run/docker/netns/71132bcfbb0f",
  "SecondaryIPAddresses": null,
  "SecondaryIPv6Addresses": null,
  "EndpointID": "a7655a6a25a9c0be70e0e47e1de4bbd81c79ab6c783e51946c67b420d2fabc50",
  "Gateway": "172.17.0.1",
  "GlobalIPv6Address": "",
  "GlobalIPv6PrefixLen": 0,
  "IPAddress": "172.17.0.3",
  "IPPrefixLen": 16,
  "IPv6Gateway": "",
  "MacAddress": "02:42:ac:11:00:03",
  "Networks": {
    "bridge": {
      "IPAMConfig": null,
      "Links": null,
      "Aliases": null,
      "NetworkID": "4b0e8535a09d2bbe8b21abc39dcc03715ad338bde8a94956b7e181f9d7b4b4be",
      "EndpointID": "a7655a6a25a9c0be70e0e47e1de4bbd81c79ab6c783e51946c67b420d2fabc50",
      "Gateway": "172.17.0.1",
      "IPAddress": "172.17.0.3",
      "IPPrefixLen": 16,
      "IPv6Gateway": "",
      "GlobalIPv6Address": "",
      "GlobalIPv6PrefixLen": 0,
      "MacAddress": "02:42:ac:11:00:03",
      "DriverOpts": null,
      "Time": 0,
      "SkipResolver": false
    }
  }
}

二、顶层字段详解(适用于默认 bridge 网络)

2.1、Bridge

  • 含义:容器连接的 Linux 网桥设备名称(如 docker0)。

典型值:

  • 默认 bridge 网络:docker0,自社区17.06 版本之后为空字符串。
  • 其他情况:空字符串 ""

注意:在自定义网络或非 bridge 驱动下通常为空。这个字段仅在使用 bridge 网络驱动时有意义,且主要反映默认 bridge 网络的行为。

存储位置:它是 NetworkSettings 的顶层字段,属于历史遗留设计,现代 Docker 更推荐通过 Networks 对象获取网络信息。

2.2、SandboxID

  • 含义:容器网络命名空间(network namespace)的唯一 ID。
  • 用途:Docker 内部用于隔离容器网络栈。
  • 关联:与 SandboxKey 配合使用。
  • 宿主机对应文件:/var/run/docker/netns/$SandboxID ,即为SandboxKey

SandboxID 文件使用:

进入容器的网络命名空间(调试用)使用 nsenter 命令:

# 进入网络命名空间并执行命令
sudo nsenter --net=/var/run/docker/netns/$SANDBOX_ID ip addr
sudo nsenter --net=/var/run/docker/netns/$SANDBOX_ID iptables -L
✅ 这是调试容器网络问题(如 DNS、路由、iptables 规则)的最直接方式。

查看命名空间类型

# 查看文件系统类型
stat -f -c %T /var/run/docker/netns/$SANDBOX_ID
# 输出: nsfs (表示 network namespace filesystem)

示例

$ docker inspect 4e78a7993616 | jq '.[0].NetworkSettings.SandboxID'
"c8d35d6aee1efcd69d835b22476ab5fa3de6c185136570b4fec6c355f4923479"

$ sudo nsenter --net=/var/run/docker/netns/c8d35d6aee1e ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
950: eth0@if951: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:08 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.8/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
$ sudo nsenter --net=/var/run/docker/netns/c8d35d6aee1e iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

# 测试 DNS 解析
$ sudo nsenter --net=/var/run/docker/netns/c8d35d6aee1e cat /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
nameserver 10.101.0.1
nameserver 10.101.0.17
nameserver 10.101.0.33

$ stat -f -c %T /var/run/docker/netns/c8d35d6aee1e
UNKNOWN (0x6e736673) 

容器停止后还能找到 SandboxID 文件吗?

不能。Docker 在容器停止时会自动删除 /var/run/docker/netns/<SandboxID> 文件。

2.3、HairpinMode

  • 含义:是否启用 发夹模式(Hairpin NAT)
  • 作用:允许容器通过宿主机 IP 访问自己暴露的端口(例如容器内 curl http://宿主机IP:8080 能访问到自己)。

典型值:

  • true:启用(常见于旧版 Docker 或特定配置)
  • false:禁用(默认)

底层实现:通过 iptables 的 hairpin nat 规则。

2.4、LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen

  • 含义:容器的 IPv6 链路本地地址(类似 IPv4 的 169.254.x.x)。
  • 格式:fe80::/64
  • 用途:仅用于同一链路(如同一宿主机)内的通信。
  • 注意:Docker 默认禁用 IPv6,故通常为空。更多相关内容查看参考文档

2.5、Ports

  • 含义:端口映射(Port Binding) 配置,即 -p 或 --publish 参数的效果。
  • 结构:
"80/tcp": [
  {
    "HostIp": "0.0.0.0",
    "HostPort": "8080"
  }
]

字段说明:

  • 80/tcp:容器内部监听的协议/端口
  • HostIp:绑定到宿主机的 IP(0.0.0.0 表示所有接口)
  • HostPort:宿主机暴露的端口

多映射:一个容器端口可映射到多个宿主机端口(数组形式)。

示例:docker run -p 8080:80 -p 8081:80 nginx → "80/tcp" 数组有两个元素。

2.6、SandboxKey

  • 含义:容器网络命名空间在宿主机上的文件路径。
  • 用途:可通过 nsenter 进入该网络命名空间调试:
nsenter --net=/var/run/docker/netns/71132bcfbb0f ip addr

2.7、SecondaryIPAddresses / SecondaryIPv6Addresses

  • 含义:容器的辅助 IP 地址(可手动添加)。
  • 典型值:null(除非显式配置)
  • 用途:高级网络场景(如多 IP 绑定)。

2.8、EndpointID

  • 含义:容器在默认 bridge 网络中的端点(endpoint)唯一 ID。
  • 注意:在 Networks 对象中每个网络都有自己的 EndpointID。

2.9、Gateway

  • 含义:容器默认网关 IP(通常是 Docker 网桥的 IP)。

典型值:

  • 默认 bridge:172.17.0.1
  • 自定义 bridge:如 172.18.0.1

2.10、IPAddress

  • 含义:容器在默认网络中的 IPv4 地址。
  • 注意:仅在默认 bridge 网络下有效;自定义网络中应看 Networks..IPAddress。

2.11、IPPrefixLen

  • 含义:IP 地址的子网掩码长度(CIDR 表示法)。
  • 示例:16 → 子网掩码 255.255.0.0,网络范围 172.17.0.0/16

2.12、MacAddress

  • 含义:容器虚拟网卡的 MAC 地址。
  • 生成规则:Docker 自动生成,通常以 02:42 开头(避免与物理 MAC 冲突)。

2.13、IPv6 相关字段(GlobalIPv6Address, GlobalIPv6PrefixLen, IPv6Gateway)

  • 含义:全局 IPv6 地址、前缀长度、网关。
  • 注意:Docker 默认禁用 IPv6,需在 daemon.json 中启用。

三、Networks 对象详解(推荐使用)

容器可连接多个网络,Networks 是一个 Map,键为网络名称(如 “bridge”),值为该网络的配置。

3.1、IPAMConfig

  • 含义:IP 地址管理配置(如静态 IP 指定)。
  • 示例(如果指定了 --ip):
"IPAMConfig": {
  "IPv4Address": "172.18.0.100"
}

3.2、Links

  • 含义:容器链接(legacy feature,已废弃)。
  • 历史:–link 参数创建的依赖关系。

3.3、Aliases

  • 含义:在该网络中的DNS 别名。
  • 用途:其他容器可通过别名访问本容器。
  • 设置方式:docker run --network-alias myapp …

3.4、NetworkID

  • 含义:Docker 网络的唯一 ID(对应 docker network ls 的 ID)。

3.5、EndpointID

  • 含义:容器在该网络中的端点 ID(与顶层 EndpointID 在默认网络下相同)。

3.6、Gateway, IPAddress, IPPrefixLen, MacAddress

  • 含义:同顶层字段,但仅针对当前网络。
  • ✅ 这是获取容器 IP 的正确方式(尤其在多网络场景)。

3.7、DriverOpts

  • 含义:网络驱动的额外选项(如 host-local IPAM 的参数)。

3.8、Time

  • 含义:内部时间戳(通常无实际意义)。

3.9、SkipResolver

  • 含义:是否跳过 Docker 内置 DNS 解析器(用于自定义 DNS 场景)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker compose自定义网络实现固定容器ip地址

    docker compose自定义网络实现固定容器ip地址

    这篇文章主要介绍了docker compose自定义网络实现固定容器ip地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 将Docker的根目录迁移到其他挂载盘的详细流程

    将Docker的根目录迁移到其他挂载盘的详细流程

    Docker默认将所有容器、镜像、数据卷等内容存放在 /var/lib/docker 下,随着业务增长,该目录很容易撑爆根分区,所以本文将教你如何将 Docker 的根目录迁移到其他挂载盘并保持原有容器、镜像、数据卷不丢失,需要的朋友可以参考下
    2025-08-08
  • Docker配置国内加速器加速镜像下载的方法

    Docker配置国内加速器加速镜像下载的方法

    本篇文章主要介绍了Docker配置国内加速器加速镜像下载的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Docker部署Node.js的方法步骤

    Docker部署Node.js的方法步骤

    这篇文章主要介绍了Docker部署Node.js的方法步骤。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • docker镜像的拉取登陆上传及保存等相关使用命令

    docker镜像的拉取登陆上传及保存等相关使用命令

    这篇文章主要为大家介绍了docker镜像的拉取登陆上传及保存等相关使用命令,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 详解Docker commit的使用

    详解Docker commit的使用

    这篇文章主要介绍了Docker commit使用的相关资料,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下
    2020-09-09
  • docker nginx 定时脚本保存30天日志信息的实现

    docker nginx 定时脚本保存30天日志信息的实现

    本文介绍了docker nginx 定时脚本保存30天日志信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01
  • Docker(黑马spring cloud笔记)详解

    Docker(黑马spring cloud笔记)详解

    这篇文章主要介绍了Docker(黑马spring cloud笔记)详解,本文章内容详细,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下<BR>
    2023-01-01
  • Centos8无法安装docker问题的解决方法

    Centos8无法安装docker问题的解决方法

    这篇文章主要给大家介绍了关于Centos8无法安装docker问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Docker部署Laravel应用的实现示例

    Docker部署Laravel应用的实现示例

    这篇文章主要介绍了Docker部署Laravel应用的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论