Home > Software engineering >  Retrieve bridge's IP within docker container or provide via environment variable
Retrieve bridge's IP within docker container or provide via environment variable

Time:09-24

When I create a docker network, a bridge is added:

docker network create DUMMY

Now executing ifconfig gives:

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

Is it possible to retrieve that IP 10.255.136.1 from a container running inside the DUMMY network?

I am dockerizing an application which requires the source IP (which, in this case, is another application running on the host) to be whitelisted in some configuration file and I believe that should be the bridge's IP. Hence my question to retrieve that IP from within the actual container. Or alternatively, is there a way to provide that IP to the container via an environment variable?

CodePudding user response:

The ip address of the bridge will be the default gateway inside the container. In other words, you can just parse the output from e.g. ip route to find the bridge address.

For example, if I create a DUMMY network, I get:

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

If I start a container on that network:

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

I have the following routing 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

And I can get the ip address itself by running that output through awk:

/ # ip route | awk '$1 == "default" {print $3}'
172.20.0.1
  • Related