私のネットワーク(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でブリッジネットワークを実行しない ホスト。それで、私がやろうとしていることは不可能ですか?
私は現在、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/
うまくいけば、これはあなたの状況を助けることができます。
MDNSアドバタイジング/リスニングでは、Dockerコンテナ内で dnssd を実行します。
だが!ローカルネットワークで検出できるようにするには、DockerコンテナーにネットワークからのIPアドレスが必要です。ネットワークからDockerコンテナーへの適切なルートを構成する必要があります。
ネットワークのデフォルトルータを制御できない場合は、macvlan/ipvlanネットワークドライバを使用してみてください。同じネットワークインターフェイスで複数のmac/IPアドレスを割り当てることができます。
私たちの場合、ネットワークはwifiなので、macvlanはwifiで動作しないため、ipvlanを使用する必要がありました。有線の場合は、macvlanを優先する必要があります。