如何传递与其相连的覆盖网络的dockerized程序ip地址

时间:2019-04-20 08:08:53

标签: docker networking overlay

我有三个覆盖网络,它们成群地连接到容器,当容器出现时,我需要将不同网络的地址提供给在内部运行的程序。每个网络都有不同的用途,我似乎无法在容器中识别它们。

我已经尝试了常用的IP a和hostname -i,但是它仅显示适配器信息,而无法识别哪个适配器位于哪个适配器上。

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

eth3@if118: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:0e:03 brd ff:ff:ff:ff:ff:ff link-netnsid 3
    inet 10.0.14.3/24 brd 10.0.14.255 scope global eth3
       valid_lft forever preferred_lft forever

eth4@if120: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 4
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth4
       valid_lft forever preferred_lft forever

eth0@if122: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:ff:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.255.0.13/16 brd 10.255.255.255 scope global eth0
       valid_lft forever preferred_lft forever

eth1@if124: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:0d:03 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 10.0.13.3/24 brd 10.0.13.255 scope global eth1
       valid_lft forever preferred_lft forever

eth2@if126: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:0f:03 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet 10.0.15.3/24 brd 10.0.15.255 scope global eth2
       valid_lft forever preferred_lft forever
hostname -i
10.0.14.3 10.0.13.3 10.0.15.3

这将显示地址,但无法确定哪个覆盖层。任何指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

  1. 您可以编写一个在swarm服务启动时在主机上运行的脚本。该脚本将在您的容器上运行docker inspect并将网络信息写入文件。该文件将存储在容器已安装的安装点上。然后,您可以从容器中读取该文件中的信息。

  2. 一个更精细的解决方案是构建一个自定义API,该API将为您运行docker inspect并在响应中返回网络信息。

  3. 覆盖网络可能会按顺序分配给接口。一点点测试就证明了这是正确的,但是我不喜欢依赖假设。