mDNS da / verso un contenitore Docker


9

Ho creato un contenitore Docker che esegue un forked-daapd(un server DAAP che pubblica su mDNS con una singola porta 3689 per richieste HTTP) ed espone la porta correttamente al sistema operativo host:

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

Il problema è che questo servizio non viene mai pubblicato correttamente su mDNS perché il suo indirizzo IP (un certo intervallo IP Docker interno) non funziona davvero. Potrei eseguirlo con --net=host, ma è potenzialmente piuttosto pericoloso poiché sostanzialmente sto consegnando la mia scheda di rete al contenitore.

C'è un modo per pubblicare questo servizio e fare in modo che la mappatura funzioni come previsto?

Risposte:


3

Il problema della dockerizzazione dei servizi mDNS (ad es . Avahi ecc.) È che il servizio deve essere consapevole del proprio indirizzo IP pubblico per pubblicizzarlo. Per quanto ne so, l'unico modo per risolvere questo problema è assegnare l'IP pubblico al container (il che è un po 'complicato a causa della mancanza di supporto per l'assegnazione IP statica in Docker).

Questo articolo descrive la tecnica su come si può fare su Debian :

  1. Il servizio Docker dovrebbe essere avviato con DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Presumo che il br0bridge sia già configurato.

  2. Il contenitore dovrebbe essere avviato con --cap-add=NET_ADMIN --net=bridge

  3. All'interno del contenitore pre-up ip addr flush dev eth0in /etc/network/interfacespuò essere utilizzato per respingere indirizzo IP assegnato dal Docker come nel seguente esempio:


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. Lo script di ingresso del contenitore dovrebbe iniziare con /etc/init.d/networking start. Inoltre, lo script di ingresso deve modificare o popolare il /etc/hostsfile per rimuovere i riferimenti all'IP assegnato da Docker.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.