从 docker-compose 容器到 LAN 主机的 Zeroconf 发现
Zeroconf discovery from docker-compose container to LAN host
物联网系统要求基站自动发现附近的设备,然后连接到它们。基站上的软件使用 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),或者可以解决这个问题吗?
您可以使用 mdns-repeater 将 mDNS 数据包从主机网络转发到 Docker 网络,并使容器能够发现您 LAN 中的设备。
avahi-daemon conf支持reflector/enable-reflector
设置。
启用后,守护程序会将所有 mDNS 数据包转发到所有其他网络接口,包括 Docker 桥接网络。
假设网络架构不复杂,docker-compose 服务现在将能够发现本地网络上的设备。
有些情况下反射是不受欢迎的行为。如果主机连接到多个本地网络,其他主机可能会收到无法访问的服务的 mDNS 数据包。
物联网系统要求基站自动发现附近的设备,然后连接到它们。基站上的软件使用 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),或者可以解决这个问题吗?
您可以使用 mdns-repeater 将 mDNS 数据包从主机网络转发到 Docker 网络,并使容器能够发现您 LAN 中的设备。
avahi-daemon conf支持reflector/enable-reflector
设置。
启用后,守护程序会将所有 mDNS 数据包转发到所有其他网络接口,包括 Docker 桥接网络。 假设网络架构不复杂,docker-compose 服务现在将能够发现本地网络上的设备。
有些情况下反射是不受欢迎的行为。如果主机连接到多个本地网络,其他主机可能会收到无法访问的服务的 mDNS 数据包。