Несколько Docker-контейнеров с демонами Avahi

586
Maciej Wilczyński

Я пытаюсь настроить умный дом Raspberry Pi, используя Docker, чтобы изолировать каждый элемент системы. Однако два из этих докеров используют Avahi для трансляции себя в домашней сети - один содержит Homebridge, а другой - Shairport-Sync.

После долгой борьбы мне удалось заставить Avahi работать над одним из следующих: хост-ОС, контейнер Homebridge или (фактически, xor) контейнер Shairport. Однако, когда запущено более одного демона, работает только один из них (запущен первый). Другие просто бесконечно зацикливаются с «конфликтом имени хоста, повторяющимся с HOSTNAME-n», при этом n приближается к бесконечности.

Есть ли способ заставить его работать?

0

1 ответ на вопрос

0
ssice

Ваша проблема связана с попыткой дважды рекламировать один и тот же хост (один и тот же IP-адрес) с разных сетевых интерфейсов.

Когда запускается первый контейнер, Avahi объявляет через mDNS о вашем присутствии (например, «hostname.local. MDNS_IN A 192.168.0.10» и связанные _service._x.hostname.local SRV настройки).

Когда запускается второй контейнер, новый Avahi снова объявляет о своем присутствии через mDNS. Когда это происходит, первая Avahi будет жаловаться на аренду хоста / IP-адреса. Затем вторая Avahi попытается использовать другое имя хоста на случай, если это произошло из-за конфликта имен хостов.

Но это была не коллизия имени хоста, это была коллизия IP. Чтобы это работало, вам нужно иметь разные IP-интерфейсы для каждой службы. То есть, назначьте несколько IP-адресов для вашего raspberry на разных виртуальных интерфейсах eth0, а затем привяжите каждый виртуальный интерфейс к отдельному контейнеру (и используйте разные имена хостов для каждой службы Docker).

Вам нужно будет иметь несколько IP-адресов в вашей подсети для Raspberry Pi, чтобы это работало.

Если вы намереваетесь использовать интерфейсы только для широковещательной передачи сервисов (а не для поиска других сервисов mDNS), вы можете добавить правило iptables, запрещающее многоадресный трафик между вашими собственными интерфейсами.

Похожие вопросы