mDNS zu / von einem Docker-Container

8

Ich habe einen Docker-Container erstellt, der forked-daapda ausführt (einen DAAP-Server, der über mDNS mit einem einzelnen Port 3689 für HTTP-Anforderungen veröffentlicht) und den Port ordnungsgemäß für das Host-Betriebssystem verfügbar macht:

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

Das Problem ist, dass dieser Dienst nie ordnungsgemäß in mDNS veröffentlicht wird, da seine IP-Adresse (einige interne Docker-IP-Bereiche) nicht wirklich funktioniert. Ich könnte es ausführen --net=host, aber das ist möglicherweise ziemlich gefährlich, da ich im Grunde genommen meinen Netzwerkadapter an den Container übergebe.

Gibt es eine Möglichkeit für mich, diesen Service zu veröffentlichen und die Kartierung wie geplant durchzuführen?

Naftuli Kay
quelle

Antworten:

3

Das Problem beim Andocken von mDNS-Diensten (z. B. Avahi usw.) besteht darin, dass der Dienst seine öffentliche IP-Adresse kennen sollte, um für ihn zu werben. Soweit mir bekannt ist, besteht die einzige Möglichkeit, dieses Problem zu beheben, darin, dem Container eine öffentliche IP-Adresse zuzuweisen (was etwas schwierig ist, da die statische IP-Zuweisung in Docker nicht unterstützt wird).

Dieser Artikel beschreibt die Technik, wie es unter Debian gemacht werden kann :

  1. Der Docker-Dienst sollte mit gestartet werden DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Ich gehe davon aus, dass die br0Brücke bereits konfiguriert ist.

  2. Container sollte mit gestartet werden --cap-add=NET_ADMIN --net=bridge

  3. Der interne Container pre-up ip addr flush dev eth0in /etc/network/interfaceskann verwendet werden, um die von Docker zugewiesene IP-Adresse wie im folgenden Beispiel zu verwerfen:


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. Das Eingabeskript des Containers sollte mit beginnen /etc/init.d/networking start. Außerdem muss das Eingabeskript die /etc/hostsDatei bearbeiten oder füllen , um Verweise auf die vom Docker zugewiesene IP zu entfernen.
Onlyjob
quelle