如何在Docker容器中做广告和浏览mDNS?

ryn*_*nop 9 mdns avahi docker

我正在尝试创建一个基于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服务器上运行?

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

Docker文件

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"]
Run Code Online (Sandbox Code Playgroud)

start.sh

#!/bin/bash

service avahi-daemon restart
service avahi-daemon status
avahi-browse -a
Run Code Online (Sandbox Code Playgroud)

nsswitch.conf

hosts: files mdns_minimal [NOTFOUND=return] dns

avahi-daemon.conf

...
enable-dbus=no
...
Run Code Online (Sandbox Code Playgroud)

跑步

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
Run Code Online (Sandbox Code Playgroud)

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

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

更新:您似乎无法在macOS主机上进行桥接网络。那我想做的是不可能的吗?

小智 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/

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

  • 是的,我已经尝试过这个,选项是“enable-dbus=no”。还是不行。我在 macOS 主机上。我不明白为什么他说你必须使用“--no-rlimits”。你知道吗?看来这会引起问题。 (2认同)