如何通过Docker Inspect命令获取特定容器网关和MAC地址的详细过滤信息?
- 内容介绍
- 文章标签
- 相关推荐
本文共计751个文字,预计阅读时间需要4分钟。
Docker 的 `inspect` 命令是获取容器网络配置的直接、可靠方式。网关(Gateway)和 MAC 地址(MacAddress)都是网络配置中的关键字段,但它们在输出结构中的位置不同,需要精确的路径来提取。
查看容器的网关地址
网关信息位于每个连接网络的子配置中,不是全局字段。默认 bridge 模式下,网关通常为 172.17.0.1;自定义网络则各不相同。必须指定网络名或遍历 Networks 对象:
-
获取默认网络(如
bridge)的网关:docker inspect --format='{{(index .NetworkSettings.Networks "bridge").Gateway}}' <容器名或ID>
-
若容器连了多个网络(如
my-net和bridge),且你想查my-net的网关:docker inspect --format='{{(index .NetworkSettings.Networks "my-net").Gateway}}' <容器名或ID>
-
批量查看所有已连接网络的网关(含网络名):
docker inspect --format='{{range $k,$v := .NetworkSettings.Networks}}{{printf "%s → %s\n" $k $v.Gateway}}{{end}}' <容器名或ID>
提取容器的 MAC 地址
MAC 地址也按网络维度存储,每个网络对应一个独立的 MacAddress 字段:
-
获取默认网络(bridge)的 MAC 地址:
docker inspect --format='{{(index .NetworkSettings.Networks "bridge").MacAddress}}' <容器名或ID>
-
获取特定网络(如
app_net)的 MAC 地址:docker inspect --format='{{(index .NetworkSettings.Networks "app_net").MacAddress}}' <容器名或ID>
-
快速列出所有网络及其 MAC 地址(带名称):
docker inspect --format='{{range $k,$v := .NetworkSettings.Networks}}{{printf "%s → %s\n" $k $v.MacAddress}}{{end}}' <容器名或ID>
实用技巧与注意事项
-
如果容器只连一个网络,也可用简写方式(但不推荐用于生产脚本):
docker inspect --format='{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' <容器名或ID> docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' <容器名或ID>
这种写法会遍历全部网络并拼接输出,多个网络时结果不可预测。
NetworkSettings.Networks是 map 类型,键为网络名(如"bridge"),值为包含Gateway、IPAddress、MacAddress等字段的对象。使用
docker network ls和docker network inspect <网络名>可交叉验证网关是否一致,避免因网络配置变更导致误判。若命令返回空,说明该容器未连接对应网络,或字段不存在(例如使用
--network=host或--network=none时,Networks为空 map,此时无 Gateway 和 MacAddress)。
本文共计751个文字,预计阅读时间需要4分钟。
Docker 的 `inspect` 命令是获取容器网络配置的直接、可靠方式。网关(Gateway)和 MAC 地址(MacAddress)都是网络配置中的关键字段,但它们在输出结构中的位置不同,需要精确的路径来提取。
查看容器的网关地址
网关信息位于每个连接网络的子配置中,不是全局字段。默认 bridge 模式下,网关通常为 172.17.0.1;自定义网络则各不相同。必须指定网络名或遍历 Networks 对象:
-
获取默认网络(如
bridge)的网关:docker inspect --format='{{(index .NetworkSettings.Networks "bridge").Gateway}}' <容器名或ID>
-
若容器连了多个网络(如
my-net和bridge),且你想查my-net的网关:docker inspect --format='{{(index .NetworkSettings.Networks "my-net").Gateway}}' <容器名或ID>
-
批量查看所有已连接网络的网关(含网络名):
docker inspect --format='{{range $k,$v := .NetworkSettings.Networks}}{{printf "%s → %s\n" $k $v.Gateway}}{{end}}' <容器名或ID>
提取容器的 MAC 地址
MAC 地址也按网络维度存储,每个网络对应一个独立的 MacAddress 字段:
-
获取默认网络(bridge)的 MAC 地址:
docker inspect --format='{{(index .NetworkSettings.Networks "bridge").MacAddress}}' <容器名或ID>
-
获取特定网络(如
app_net)的 MAC 地址:docker inspect --format='{{(index .NetworkSettings.Networks "app_net").MacAddress}}' <容器名或ID>
-
快速列出所有网络及其 MAC 地址(带名称):
docker inspect --format='{{range $k,$v := .NetworkSettings.Networks}}{{printf "%s → %s\n" $k $v.MacAddress}}{{end}}' <容器名或ID>
实用技巧与注意事项
-
如果容器只连一个网络,也可用简写方式(但不推荐用于生产脚本):
docker inspect --format='{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' <容器名或ID> docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' <容器名或ID>
这种写法会遍历全部网络并拼接输出,多个网络时结果不可预测。
NetworkSettings.Networks是 map 类型,键为网络名(如"bridge"),值为包含Gateway、IPAddress、MacAddress等字段的对象。使用
docker network ls和docker network inspect <网络名>可交叉验证网关是否一致,避免因网络配置变更导致误判。若命令返回空,说明该容器未连接对应网络,或字段不存在(例如使用
--network=host或--network=none时,Networks为空 map,此时无 Gateway 和 MacAddress)。

