获取与Docker网络相关的桥接名称

10
我正在使用命令"docker network create --d bridge mynet"创建一个Docker网络。我想要获取与该Docker网络相关联的桥接名称。
我知道我可以使用"-o"来提供桥接名称,例如:"docker network create --d bridge -o com.docker.network.bridge.name=mybridge mynet"。这种方法适用于普通的桥接驱动程序,但在我的情况下,我正在使用ovs驱动程序,因此我是这样启动网络的:"docker network create --d ovs mynet"。如果我在ovs驱动程序的情况下使用"-o",它将无法工作。
请建议一种获取与网络关联的桥接名称的方法。当我创建网络时创建的新桥接和随之创建的桥接具有随机名称,我可以使用"ifconfig"命令查看它们。
2个回答

12

docker network inspect的输出中,桥接名称不是其中的一部分,但它始终是br-<网络ID的前12个字符>(除非使用-o com.docker.network.bridge.name=<桥接名称>在创建网络时明确指定了桥接名称)。

network_id=$(docker network inspect -f {{.Id}} <network name>)
bridge_name="br-${network_id:0:12}"

另一个选择是依赖于桥接器作为网络的默认网关,因此其IP地址和网络的网关地址相同。

network_gateway=$(docker inspect \
    -f '{{range .IPAM.Config}}{{.Gateway}}{{end}}' <network name>)
bridge_name=$(ifconfig | grep -B1 "inet $network_gateway" | head -1 | cut -d: -f1)

这是使用 br- 前缀的代码。https://github.com/moby/libnetwork/blob/b3507428be5b458cb0e2b4086b13531fb0706e46/drivers/bridge/bridge.go#L551 - David Xia

0
感谢@Jarek的回答,以下docker compose可以创建和使用mybr0
version: "2.1"

services:
  network-only:
    image: tianon/true
    container_name: network-only
    networks:
      - mybr0

networks:
  mybr0:
    name: mybr0
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: mybr0

$sudo brctl show                      
bridge name bridge id       STP enabled interfaces
docker0     8000.0242c5756f09   no      
mybr0       8000.0242798018bc   no      

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接