对于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
这种情况是否被认为是mDNS的不合规格(在.local中不再考虑ServiceA),还是可以解决?
答案 0 :(得分:1)
您可以使用mdns-repeater将mDNS数据包从主机网络转发到Docker网络,并使容器能够发现LAN中的设备。
答案 1 :(得分:1)
avahi-daemon conf支持reflector/enable-reflector
设置。
启用后,守护程序会将所有mDNS数据包转发到所有其他网络接口,包括Docker桥网络。 假设网络结构不复杂,则docker-compose服务现在将能够发现本地网络上的设备。
在某些情况下,反射是不良行为。如果该主机连接到多个本地网络,则其他主机可能会获得mDNS数据包以获取无法访问的服务。