14

我正在尝试创建一个基于 ubuntu 17.04 的 docker 容器,该容器可以浏览我的网络上的 mDNS(在 docker 网络之外)并在 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"]

启动.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 吗?

enable-dbus=yes在我的 mac 上的 17.04 virtualbox 映像中运行相同的命令(除了我保留),一切正常。

更新:看起来你不能在 macOS主机上进行桥接网络。那么我想做的事情是不可能的吗?

4

2 回答 2

0

我目前正在尝试让 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/

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

于 2017-05-25T02:42:13.013 回答
-1

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

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

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

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

于 2019-01-16T17:33:01.527 回答