2017-05-19 2 views
3

Ich versuche, einen Ubuntu 17.04 basierten Docker-Container zu erstellen, der mDNS in meinem Netzwerk (außerhalb des Andock-Netzwerks) durchsuchen UND auf mDNS zu meinem Netzwerk (außerhalb des Andock-Netzwerks) werben kann.Wie kann ich mDNS innerhalb von docker container anzeigen und durchsuchen?

Ich möchte diesen Docker-Container auf einem MacOS-Host (während meiner Entwicklung) UND einem Linux (Debian) Host für die Produktion ausführen können.

https://github.com/ianblenke/docker-avahi scheint dies für Linux-Hosts gelöst zu haben (unter Verwendung von Avahi-Daemon und Zuordnung des/var/run/dbus-Volumes zum Host). Wenn ich auf meinem Macbook entwickle, möchte ich mDNSResponder verwenden.

Wie erstelle ich einen Container, der in meinem lokalen Netzwerk werben und durchsuchen kann, der auch auf meinem MacOS-Laptop und auf einem Linux-Server ausgeführt wird?

Hier ist was ich bisher habe.

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 

Lauf Wie Sie avahi-Daemon ausgeführt wird sehen können, aber avahi-browse glaubt nicht, es ist. Ist das, weil ich dbus deaktiviert habe?

Ausführen der gleichen Befehle (außer ich enable-dbus=yes halten) in einem 17.04 virtualbox Bild auf meinem Mac Dinge funktionieren gut.

Update: es sieht aus wie Sie können not do bridged networking on a macOS Host. Ist das, was ich versuche, unmöglich zu machen?

+0

Ist die Option '--net = host' nicht ausreichend? Damit hat der Container Zugriff auf die Host-Schnittstelle. – Robert

+0

Nein.Linux (os ich laufe im Container) benötigt einen Avahi-Daemon, für den AFAIK dbus benötigt. https://github.com/ianblenke/docker-avahi ist ein Docker-Image, das funktioniert, wenn Ihr Host Linux ist. Nicht, wenn Ihr Host macOS ist (da dbus nicht verwendet wird). Oder ist das eine falsche Behauptung? – rynop

Antwort

0

ich derzeit versuche avahi in einem Docker Behälter zum Laufen zu bringen und in meiner Forschung kam über diese:

Sie können in der Avahi Konfigurationseinstellungen deaktivieren dbus so wird es nicht es verwenden. Wenn Sie Avahi dann in Docker laufen lassen, müssen Sie ihm die --no-rlimits-Flagge übergeben und es wird funktionieren, ohne die Sicherheit Ihres Containers zu gefährden.

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

Hoffentlich kann dies mit Ihrer Situation helfen.

+0

Yup Ich habe das versucht, Option ist 'enable-dbus = no '. Funktioniert immer noch nicht. Ich bin auf dem Mac OS Host. Ich verstehe nicht, warum er sagt, dass du '--no-rlimits' benutzen musst. Wissen Sie? Scheint so, als würde das Probleme verursachen. – rynop

Verwandte Themen