mDNS vers / depuis un conteneur Docker


9

J'ai créé un conteneur Docker qui exécute un forked-daapd(un serveur DAAP publiant sur mDNS avec un seul port 3689 pour les requêtes HTTP) et expose correctement le port au système d'exploitation hôte:

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

Le problème est que ce service n'est jamais publié correctement sur mDNS car son adresse IP (une plage IP Docker interne) ne fonctionne pas vraiment. Je pourrais l'exécuter avec --net=host, mais c'est potentiellement assez dangereux car je remets essentiellement ma carte réseau au conteneur.

Existe-t-il un moyen pour moi de publier ce service et de faire travailler la cartographie comme prévu?

Réponses:


3

Le problème de la dockingisation des services mDNS (par exemple Avahi, etc.) est que le service doit connaître son adresse IP publique afin d'en faire la publicité. Pour autant que je sache, la seule façon de résoudre ce problème est d'attribuer une IP publique au conteneur (ce qui est un peu délicat en raison du manque de prise en charge de l'attribution IP statique dans Docker).

Cet article décrit comment cela peut être fait sur Debian :

  1. Le service Docker doit être démarré avec DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Je suppose que le br0pont est déjà configuré.

  2. Le conteneur doit être démarré avec --cap-add=NET_ADMIN --net=bridge

  3. Le conteneur intérieur pre-up ip addr flush dev eth0dans /etc/network/interfacespeut être utilisé pour ignorer l'adresse IP attribuée par Docker comme dans l'exemple suivant:


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. Le script d'entrée du conteneur doit commencer par /etc/init.d/networking start. Le script d'entrée doit également modifier ou remplir le /etc/hostsfichier afin de supprimer les références à l'adresse IP attribuée par Docker.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.