与 Docker 容器之间的 mDNS

与 Docker 容器之间的 mDNS

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

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

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

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

答案1

docker化 mDNS 服务的问题(例如阿瓦希等)是服务应该知道其公共 IP 地址以便对其进行广告。据我所知,解决这个问题的唯一方法是将公共IP分配给容器(这有点棘手,因为缺乏对静态IP分配的支持在 Docker 中)。

本文描述了如何完成该技术德班:

  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 eth0in/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 的引用。

相关内容