从 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

这种情况是否被认为不符合 mDNS 规范(.local 中不再考虑 ServiceA),或者可以解决这个问题吗?

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

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

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

有些情况下反射是不受欢迎的行为。如果主机连接到多个本地网络,其他主机可能会收到无法访问的服务的 mDNS 数据包。