如何传递附加到它的覆盖网络的 dockerized 程序 ip 地址
how to pass dockerized program ip addresses of overlay networks attached to it
我有三个覆盖网络连接到集群中的容器,我需要在容器启动时将不同网络的地址提供给程序 运行。每个网络都有不同的用途,我似乎无法在容器中识别它们。
我已经尝试了通常的 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
这显示了地址,但无法识别哪个是哪个叠加层。任何指针将不胜感激。
您可以编写一个脚本,运行在 swarm 服务启动时在主机上运行。该脚本将 运行 docker 检查您的容器并将网络信息写入文件。该文件将存储在容器已安装的安装点上。然后您可以从容器中读取该文件中的信息。
一个更详尽的解决方案是构建一个自定义 API,它将 运行 docker 为您检查并 return 网络信息在回复中。
覆盖网络可能按顺序分配给接口。一些测试表明这是真的,但我不喜欢依赖假设。
我有三个覆盖网络连接到集群中的容器,我需要在容器启动时将不同网络的地址提供给程序 运行。每个网络都有不同的用途,我似乎无法在容器中识别它们。
我已经尝试了通常的 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
这显示了地址,但无法识别哪个是哪个叠加层。任何指针将不胜感激。
您可以编写一个脚本,运行在 swarm 服务启动时在主机上运行。该脚本将 运行 docker 检查您的容器并将网络信息写入文件。该文件将存储在容器已安装的安装点上。然后您可以从容器中读取该文件中的信息。
一个更详尽的解决方案是构建一个自定义 API,它将 运行 docker 为您检查并 return 网络信息在回复中。
覆盖网络可能按顺序分配给接口。一些测试表明这是真的,但我不喜欢依赖假设。