如何在docker容器中宣传和浏览mDNS?

时间:2017-05-19 19:55:46

标签: docker mdns avahi

我正在尝试创建一个基于ubuntu 17.04的docker容器,可以在我的网络上(在docker网络之外)浏览mDNS,并在mDNS上通告我的网络(在docker网络之外)。

我希望能够在macOS主机(在开发期间)和Linux(Debian)主机上运行此docker容器进行生产。

https://github.com/ianblenke/docker-avahi似乎已经为Linux主机解决了这个问题(使用avahi守护程序并将/ var / run / dbus卷映射到主机)。当我在我的macbook上开发时,我想使用mDNSResponder。

如何创建可在我的本地网络上发布和浏览的容器,该容器也可以在我的macOS笔记本电脑和Linux服务器上运行?

这是我到目前为止所拥有的。

Dockerfile

FROM ubuntu:17.04    
WORKDIR /app

RUN apt-get update && apt-get install -yq avahi-daemon avahi-utils libnss-mdns \
  && apt-get -qq -y autoclean \
  && apt-get -qq -y autoremove \
  && apt-get -qq -y clean

RUN update-rc.d avahi-daemon enable

COPY docker/etc/nsswitch.conf /etc/nsswitch.conf
COPY docker/etc/avahi-daemon.conf /etc/avahi/avahi-daemon.conf

COPY docker/start.sh /app    

CMD ["/bin/bash","start.sh"]

start.sh

#!/bin/bash

service avahi-daemon restart
service avahi-daemon status
avahi-browse -a

的nsswitch.conf

hosts: files mdns_minimal [NOTFOUND=return] dns

的avahi-daemon.conf

...
enable-dbus=no
...

运行

docker run --net=host -it mdns1
 * Restarting Avahi mDNS/DNS-SD Daemon avahi-daemon                      [ OK ]
Avahi mDNS/DNS-SD Daemon is running
Failed to create client object: Daemon not running

正如您所见,avahi-daemon正在运行,但avahi-browse并不认为它是。这是因为我禁用了dbus吗?

在我的Mac上运行相同的命令(除了我保留enable-dbus=yes)在17.04虚拟框图像中工作正常。

更新:您似乎可以not do bridged networking on a macOS托管。我试图做的事情是不可能的呢?

2 个答案:

答案 0 :(得分:1)

我目前正试图让avahi在Docker容器内工作,在我的研究中发现了这个:

  

你可以在Avahi设置配置中禁用dbus,这样它就不会失败   用它。然后当你在Docker中运行Avahi时,你必须通过它   --no-rlimits标志,它可以在不影响容器安全的情况下工作。

https://www.reddit.com/r/docker/comments/54ufz2/is_there_any_way_to_run_avahi_in_docker_without/

希望这对您的情况有所帮助。

答案 1 :(得分:0)

对于mdns广告/收听,我们运行 dnssd 在docker容器中。

但是!为了在本地网络上可被发现 docker容器应具有来自网络的IP地址,应配置从网络到docker容器的正确路由。

如果您无法控制网络的默认路由器, 您可以尝试使用macvlan / ipvlan网络驱动程序。 它将允许您在同一网络接口上分配多个mac / IP地址。

在我们的例子中,网络是wifi,因此我们必须使用ipvlan,因为macvlan不适用于wifi。在有线情况下,您应该首选macvlan。