web-dev-qa-db-ja.com

dockerコンテナー内からmDNSをアドバタイズして参照するにはどうすればよいですか?

私のネットワーク(Dockerネットワークの外)でmDNSを参照し、自分のネットワーク(Dockerネットワークの外)にmDNSでアドバタイズできるubuntu 17.04ベースのDockerコンテナーを作成しようとしています。

このDockerコンテナーをmacOSホスト(開発中)とLinux(Debian)ホストで運用できるようにしたいと思っています。

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を無効にしたためですか?

同じコマンドを実行する(ただし、私はenable-dbus=yes)私のMacの17.04 virtualboxイメージ内では問題なく動作します。

更新:できるように見えます macOSでブリッジネットワークを実行しない ホスト。それで、私がやろうとしていることは不可能ですか?

11
rynop

私は現在、Dockerコンテナー内でavahiを機能させようとしていますが、私の研究ではこれに遭遇しました:

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
Michal

MDNSアドバタイジング/リスニングでは、Dockerコンテナ内で dnssd を実行します。

だが!ローカルネットワークで検出できるようにするには、DockerコンテナーにネットワークからのIPアドレスが必要です。ネットワークからDockerコンテナーへの適切なルートを構成する必要があります。

ネットワークのデフォルトルータを制御できない場合は、macvlan/ipvlanネットワークドライバを使用してみてください。同じネットワークインターフェイスで複数のmac/IPアドレスを割り当てることができます。

私たちの場合、ネットワークはwifiなので、macvlanはwifiで動作しないため、ipvlanを使用する必要がありました。有線の場合は、macvlanを優先する必要があります。

0
Sergey Kirgizov