docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker容器inspect内容NetworkSettings

docker容器inspect内容NetworkSettings的使用

作者:岳来

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

docker inspectNetworkSettingsNetworkSettings

一、示例

$ 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

典型值:

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

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

2.2、SandboxID

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

典型值:

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

2.4、LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen

2.5、Ports

"80/tcp": [
  {
    "HostIp": "0.0.0.0",
    "HostPort": "8080"
  }
]

字段说明:

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

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

2.6、SandboxKey

nsenter --net=/var/run/docker/netns/71132bcfbb0f ip addr

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 对象详解(推荐使用)

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

3.1、IPAMConfig

"IPAMConfig": {
  "IPv4Address": "172.18.0.100"
}

3.2、Links

3.3、Aliases

3.4、NetworkID

3.5、EndpointID

3.6、Gateway, IPAddress, IPPrefixLen, MacAddress

3.7、DriverOpts

3.8、Time

3.9、SkipResolver

总结

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

您可能感兴趣的文章:
阅读全文