docker 容器inspect 内容 NetworkSettings
·
文章目录
- 一、示例
- 二、顶层字段详解(适用于默认 bridge 网络)
- 2.1、 Bridge
- 2.2、SandboxID
- 2.3、 HairpinMode
- 2.4、 LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen
- 2.5、 Ports
- 2.6、 SandboxKey
- 2.7、 SecondaryIPAddresses / SecondaryIPv6Addresses
- 2.8、 EndpointID
- 2.9、 Gateway
- 2.10、 IPAddress
- 2.11、 IPPrefixLen
- 2.12、 MacAddress
- 2.13、 IPv6 相关字段(GlobalIPv6Address, GlobalIPv6PrefixLen, IPv6Gateway)
- 三、Networks 对象详解(推荐使用)
- 四、docker network 命令
- 五、参考文档
docker inspect 输出中的
NetworkSettings 字段包含了容器网络配置的详细信息。
NetworkSettings 分为两部分:
- 顶层字段(
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
}
}
}
# host模式
{
"Bridge": "",
"SandboxID": "26023e5f0a154911c0e1ad4ed24ae46217a4a61691287c07966fea8ef6ba53af",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/default",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"host": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "314b9a2c301996ae10d61cf21321c11157bc307683c657a5461a7c62c975bea0",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null,
"Time": 0,
"SkipResolver": false
}
}
}
二、顶层字段详解(适用于默认 bridge 网络)
2.1、 Bridge
- 含义:容器连接的 Linux 网桥设备名称(如 docker0)。
- 典型值:
- 默认 bridge 网络:
docker0,自社区17.06 版本之后为空字符串。 - 其他情况:空字符串
""
- 默认 bridge 网络:
- 注意:在自定义网络或非 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>文件。
- 不能。Docker 在容器停止时会自动删除
- 进入容器的网络命名空间(调试用)
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。
- 如示例中bridge 模式中的
"172.17.0.3", host 模式为空,与宿主机ip 一致
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 network 命令
https://blog.csdn.net/yuelai_217/article/details/160111829
五、参考文档
1、https://blog.csdn.net/yuelai_217/article/details/157428034
2、https://blog.csdn.net/yuelai_217/article/details/157548664
3、https://blog.csdn.net/yuelai_217/article/details/158067828
4、https://blog.csdn.net/yuelai_217/article/details/160111829
更多推荐

所有评论(0)