在 docker 容器中检索网桥的 IP 或通过环境变量提供

Retrieve bridge's IP within docker container or provide via environment variable

当我创建一个 docker 网络时,添加了一个网桥:

docker network create DUMMY

现在执行 ifconfig 得到:

br-8a429249b4d9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.255.136.1  netmask 255.255.255.0  broadcast 10.255.136.255
        inet6 fe80::42:88ff:fe9b:9a33  prefixlen 64  scopeid 0x20<link>
        ether 02:42:88:9b:9a:33  txqueuelen 0  (Ethernet)
        RX packets 9  bytes 388 (388.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 74  bytes 11136 (11.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

是否可以从 DUMMY 网络内的容器 运行 中检索 IP 10.255.136.1

我正在 docker 将需要源 IP 的应用程序(在这种情况下,是主机上的另一个应用程序 运行)设置在某些配置文件中的白名单中,我相信应该是网桥的IP。因此我的问题是从实际容器中检索该 IP。或者,有没有办法通过环境变量将该 IP 提供给容器?

网桥的IP地址将是容器内的默认网关。换句话说,您可以只解析例如ip route寻找网桥地址。

例如,如果我创建一个 DUMMY 网络,我会得到:

6: br-ea7804d337bc: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:8e:97:b4:02 brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/16 brd 172.20.255.255 scope global br-ea7804d337bc
       valid_lft forever preferred_lft forever
    inet6 fe80::42:8eff:fe97:b402/64 scope link
       valid_lft forever preferred_lft forever

如果我在那个网络上启动一个容器:

docker run -it --rm --net DUMMY alpine sh

我有以下路由 table:

/ # ip route
default via 172.20.0.1 dev eth0
172.20.0.0/16 dev eth0 scope link  src 172.20.0.2

我可以通过 运行 获取 IP 地址本身,通过 awk:

输出
/ # ip route | awk ' == "default" {print }'
172.20.0.1