我制作了一个 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
Run Code Online (Sandbox Code Playgroud)
问题是这个服务永远不会正确发布到 mDNS,因为它的 IP 地址(一些内部 Docker IP 范围)实际上不起作用。我可以用 运行它--net=host
,但这可能非常危险,因为我基本上是将我的网络适配器交给容器。
有没有办法让我发布此服务并按计划进行映射工作?
小智 4
docker化 mDNS 服务(例如Avahi等)的问题是服务应该知道其公共 IP 地址才能进行广告。据我所知,解决这个问题的唯一方法是将公共 IP 分配给容器(由于Docker 中缺乏对静态 IP 分配的支持,这有点棘手)。
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
Run Code Online (Sandbox Code Playgroud)
/etc/init.d/networking start
. 此外,入口脚本需要编辑或填充/etc/hosts
文件,以便删除对 Docker 分配的 IP 的引用。 归档时间: |
|
查看次数: |
7161 次 |
最近记录: |