mDNS ke / dari wadah Docker

9

Saya telah membuat wadah Docker yang menjalankan forked-daapd(server DAAP menerbitkan lebih dari mDNS dengan port tunggal 3689 untuk permintaan HTTP) dan mengekspos port dengan benar ke sistem operasi host:

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

Masalahnya adalah bahwa layanan ini tidak pernah dipublikasikan dengan benar ke mDNS karena alamat IP-nya (beberapa rentang Docker IP internal) tidak benar-benar berfungsi. Saya bisa menjalankannya --net=host, tapi itu berpotensi cukup berbahaya karena saya pada dasarnya menyerahkan adaptor jaringan saya ke wadah.

Apakah ada cara bagi saya untuk menerbitkan layanan ini dan melakukan pekerjaan pemetaan sesuai rencana?

Naftuli Kay
sumber

Jawaban:

3

Masalah dockerising layanan mDNS (mis . Avahi, dll.) Adalah bahwa layanan harus mengetahui alamat IP publiknya untuk mengiklankannya. Sejauh yang saya ketahui, satu-satunya cara untuk mengatasi masalah ini adalah dengan menetapkan IP publik ke wadah (yang agak rumit karena kurangnya dukungan untuk penetapan IP statis di Docker).

Artikel ini menjelaskan teknik bagaimana hal itu dapat dilakukan pada Debian :

  1. Layanan Docker harus dimulai dengan DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false". Saya berasumsi br0jembatan itu sudah dikonfigurasi.

  2. Kontainer harus dimulai dengan --cap-add=NET_ADMIN --net=bridge

  3. Wadah pre-up ip addr flush dev eth0di dalam /etc/network/interfacesdapat digunakan untuk mengabaikan alamat IP yang diberikan oleh Docker seperti dalam contoh berikut:


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. Skrip entri wadah harus dimulai dengan /etc/init.d/networking start. Juga skrip entri perlu mengedit atau mengisi /etc/hostsfile untuk menghapus referensi ke IP yang ditugaskan Docker.
Onlyjob
sumber