Vários contêineres do Docker com daemons Avahi

0

Estou tentando configurar um Raspberry Pi smart-home usando o Docker para isolar todos os elementos do sistema. No entanto, dois desses Dockers usam o Avahi para se transmitir na rede doméstica - um contém o Homebridge, o outro Shairport-Sync.

Depois de muita dificuldade, consegui fazer com que o Avahi trabalhasse em um dos seguintes: host OS, container Homebridge OU (na verdade, xor) container Shairport. No entanto, quando mais de um daemon está em execução, apenas um deles funciona (o primeiro é lançado). Os outros apenas repetem infinitamente o "conflito de nome de host, tentando novamente com HOSTNAME-n", com n se aproximando do infinito.

Existe alguma maneira de fazer isso funcionar?

    
por Maciej Wilczyński 28.12.2017 / 10:22

1 resposta

0

Seu problema decorre da tentativa de anunciar duas vezes o mesmo host (o mesmo endereço IP) de diferentes interfaces de rede.

Quando o primeiro contêiner é iniciado, o Avahi anuncia sobre o mDNS sua presença (por exemplo, "hostname.local. mDNS_IN A 192.168.0.10" e as configurações de SRV associadas _service._x.hostname.local).

Quando o segundo contêiner é iniciado, um novo Avahi anuncia sobre o mDNS sua presença novamente. Quando isso acontece, o primeiro Avahi se queixará de ter o nome do host / endereço IP alugado. Então, o segundo Avahi tentará um nome de host diferente caso tenha ocorrido devido a uma colisão de nome de host.

Mas não foi uma colisão de nome de host, foi uma colisão de IP. Você precisaria ter interfaces IP diferentes em cada serviço para que isso funcionasse. Ou seja, atribua vários IPs ao seu framboesa em diferentes interfaces virtuais de eth0 e, em seguida, vincule cada interface virtual a um contêiner diferente (e use nomes de host diferentes para cada serviço de encaixe).

Você precisará ter vários IPs disponíveis em sua sub-rede para o Raspberry Pi para que isso funcione.

Se a sua intenção é usar apenas as interfaces para transmitir os serviços (e não procurar outros serviços mDNS), você pode adicionar uma regra iptables que proíbe o tráfego multicast entre suas próprias interfaces.

    
por 28.07.2018 / 22:18