往返于Docker容器的mDNS


9

我已经制作了一个Docker容器,该容器运行一个forked-daapd(通过mDNS发布的DAAP服务器,该端口具有用于HTTP请求的单个端口3689),并将该端口正确地公开给主机操作系统:

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

问题在于该服务永远不会正确发布到mDNS,因为它的IP地址(某些内部Docker IP范围)不能真正起作用。我可以使用来运行它--net=host,但这可能非常危险,因为我基本上是将网络适配器交给容器。

有没有办法让我发布此服务并按计划进行地图绘制?

Answers:


3

对mDNS服务(例如Avahi等)进行泊坞服务的问题在于,该服务应知道其公共IP地址,以便对其进行广告。据我所知,解决此问题的唯一方法是将公共IP分配给容器(由于缺乏对 Docker中静态IP分配的支持,因此有些棘手)。

本文介绍了如何在Debian上完成技术:

  1. Docker服务应以开头DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"。我认为br0网桥已经配置好了。

  2. 容器应以 --cap-add=NET_ADMIN --net=bridge

  3. 内部容器pre-up ip addr flush dev eth0中的内容/etc/network/interfaces可用于关闭Docker分配的IP地址,如以下示例所示:


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. 容器的输入脚本应以开头/etc/init.d/networking start。输入脚本还需要编辑或填充/etc/hosts文件,以删除对Docker分配的IP的引用。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.