mDNS de / para um contêiner Docker

7

Eu criei um contêiner do Docker que executa um forked-daapd (um servidor DAAP que publica por mDNS com uma única porta 3689 para solicitações HTTP) e expõe a porta adequadamente ao sistema operacional do host:

sudo docker run -it --rm -v /home/naftuli/Music:/srv/music -p 3689:3689 \
    daapd /sbin/my_init

O problema é que esse serviço nunca é publicado corretamente no mDNS porque seu endereço IP (alguns tipos internos de IP do Docker) realmente não funciona. Eu poderia executá-lo com --net=host , mas isso é potencialmente muito perigoso, já que basicamente entrego meu adaptador de rede ao contêiner.

Existe uma maneira de eu publicar este serviço e ter o trabalho de mapeamento como planejado?

    
por Naftuli Kay 07.05.2015 / 01:10

1 resposta

2

O problema de dockerização de serviços mDNS (por exemplo, Avahi etc.) é que o serviço deve estar ciente de seu endereço IP público para publicá-lo. Tanto quanto eu sei, a única maneira de resolver este problema é atribuir IP público ao contêiner (o que é um pouco complicado devido a falta de suporte para atribuição de IP estático no Docker).

Este artigo descreve como isso pode ser feito em Debian :

  1. O serviço do Docker deve ser iniciado com DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false" . Presumo que br0 bridge já esteja configurado.

  2. O contêiner deve ser iniciado com --cap-add=NET_ADMIN --net=bridge

  3. O contêiner interno pre-up ip addr flush dev eth0 in /etc/network/interfaces pode ser usado para descartar o endereço IP atribuído pelo Docker, como no exemplo a seguir:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    pre-up ip addr flush dev eth0
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
  1. O script de entrada do contêiner deve começar com /etc/init.d/networking start . O script de entrada também precisa editar ou preencher o arquivo /etc/hosts para remover referências ao IP atribuído pelo Docker.
por 18.12.2015 / 01:41