我制作了一个 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 中)。
Docker 服务应该以
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
.我假设br0
桥已经配置好了。容器应该以
--cap-add=NET_ADMIN --net=bridge
容器内的
pre-up ip addr flush dev eth0
in/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
- 容器的入口脚本应以
/etc/init.d/networking start
.此外,入口脚本需要编辑或填充/etc/hosts
文件,以便删除对 Docker 分配的 IP 的引用。