mDNS a / desde un contenedor Docker

9

Hice un contenedor Docker que ejecuta un forked-daapd(un servidor DAAP que publica sobre mDNS con un solo puerto 3689 para solicitudes HTTP) y expone el puerto correctamente al sistema operativo host:

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

El problema es que este servicio nunca se publica correctamente en mDNS porque su dirección IP (algún rango interno de Docker IP) realmente no funciona. Podría ejecutarlo --net=host, pero eso es potencialmente bastante peligroso ya que básicamente estoy entregando mi adaptador de red al contenedor.

¿Hay alguna manera de publicar este servicio y hacer que el mapeo funcione según lo planeado?

Naftuli Kay
fuente

Respuestas:

3

El problema de dockerizar los servicios mDNS (por ejemplo, Avahi, etc.) es que el servicio debe tener en cuenta su dirección IP pública para publicitarlo. Hasta donde sé, la única forma de abordar este problema es asignar una IP pública al contenedor (lo cual es un poco complicado debido a la falta de soporte para la asignación de IP estática en Docker).

Este artículo describe la técnica de cómo se puede hacer en Debian :

  1. Se debe comenzar con el servicio Docker DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Supongo que el br0puente ya está configurado.

  2. El contenedor debe comenzar con --cap-add=NET_ADMIN --net=bridge

  3. Recipiente interior pre-up ip addr flush dev eth0en /etc/network/interfacespuede ser utilizado para desestimar dirección IP asignada por acoplable como en ejemplo siguiente:


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. El script de entrada del contenedor debe comenzar por /etc/init.d/networking start. Además, el script de entrada debe editar o llenar el /etc/hostsarchivo para eliminar las referencias a la IP asignada por Docker.
Solo trabajo
fuente