从docker-compose容器到LAN主机的Zeroconf发现

时间:2018-11-15 10:35:29

标签: networking docker-compose zeroconf

对于IoT系统,要求基站自动发现附近的设备,然后连接到它们。使用docker-compose部署基站上的软件。

服务使用mDNS(zeroconf)做广告,并将自己标识为mytype类型。客户端使用aiozeroconf查找与_mytype._tcp.local.匹配的服务。

问题是docker-compose网络内部的客户端无法发现LAN网络中的服务-即使它们可以通过其他方式访问。

当前,我具有以下设置:

LAN (Wifi)
  - IoT device
    - ServiceA
  - Host / base station
    - ClientA
    - Docker-compose network
      - ServiceB
      - ClientB
  • ClientA同时找到ServiceA和ServiceB
  • ClientB找到ServiceB
  • 主机上的
  • avahi-discover同时找到ServiceA和ServiceB
  • ClientB可以使用LAN IP(192.168.x.x)连接到ServiceA

这种情况是否被认为是mDNS的不合规格(在.local中不再考虑ServiceA),还是可以解决?

2 个答案:

答案 0 :(得分:1)

您可以使用mdns-repeater将mDNS数据包从主机网络转发到Docker网络,并使容器能够发现LAN中的设备。

答案 1 :(得分:1)

avahi-daemon conf支持reflector/enable-reflector设置。

启用后,守护程序会将所有mDNS数据包转发到所有其他网络接口,包括Docker桥网络。 假设网络结构不复杂,则docker-compose服务现在将能够发现本地网络上的设备。

在某些情况下,反射是不良行为。如果该主机连接到多个本地网络,则其他主机可能会获得mDNS数据包以获取无法访问的服务。