Dockerコンテナとの間のmDNS


9

私はDockerコンテナを作成しforked-daapd(HTTPリクエスト用に単一ポート3689でmDNSを介して公開するDAAPサーバー)、ホストオペレーティングシステムにポートを適切に公開します。

sudo docker run -it --rm -v /home/naftuli/Music:/srv/music -p 3689:3689 \
    daapd /sbin/my_init

問題は、IPアドレス(一部の内部Docker IP範囲)が実際には機能しないため、このサービスがmDNSに正しく公開されないことです。で実行することもできます--net=hostが、基本的にはネットワークアダプターをコンテナーに渡しているため、かなり危険な場合があります。

このサービスを公開して、計画どおりにマッピング作業を行う方法はありますか?

回答:


3

mDNSサービス(Avahiなど)のドッキングの問題は、アドバタイズするためにサービスがパブリックIPアドレスを認識する必要があることです。私が知っている限り、この問題に対処する唯一の方法はコンテナーにパブリックIPを割り当てることです(Docker で静的IP割り当てがサポートされていないため、少し注意が必要です)。

この記事では、Debianでそれを行う方法について説明します

  1. Dockerサービスはで開始する必要がありDOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"ます。br0ブリッジはすでに構成されていると思います。

  2. コンテナは --cap-add=NET_ADMIN --net=bridge

  3. 次の例のように、内部のコンテナpre-up ip addr flush dev eth0/etc/network/interfaces使用して、Dockerによって割り当てられたIPアドレスを閉じることができます。


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    pre-up ip addr flush dev eth0
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
  1. コンテナのエントリスクリプトはで始まる必要があり/etc/init.d/networking startます。また/etc/hosts、Dockerによって割り当てられたIPへの参照を削除するには、エントリスクリプトでファイルを編集または入力する必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.