我试图创建一个基于Ubuntu 17.04的码头容器,可以浏览我的网络(码头网络外)上的mDNS,并在我的网络(码头网络外部)的mDNS上做广告。如何在Docker容器中做广告并浏览mDNS?
我希望能够在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守护程序正在运行,但avahi-browse
不认为它是。这是因为我禁用了dbus吗?
运行相同的命令(除了我保留enable-dbus=yes
)在我的Mac上的17.04 virtualbox映像内工作得很好。
更新:它看起来像你可以not do bridged networking on a macOS主机。那么我正在努力做什么不可能?
是不是'--net = host'选项不够?通过该容器可以访问主机接口。 – Robert
没有。Linux(我在容器中运行的操作系统)需要avahi-daemon,其中AFAIK需要dbus。 https://github.com/ianblenke/docker-avahi是一个码头工人的图像,如果你的主机是linux的话。如果您的主机是macOS(因为它不使用dbus),请不要使用它。或者这是一个不正确的断言? – rynop