2017-05-14 5 views
0

私はドッキング用のコンテナを持っていて、VM上にポート8125でUDPをリッスンするデーモンもインストールしました。コンテナはこの8125ポートでUDPプロトコルでデータを送信します。デフォルトでは、ドッカーコンテナはホストのローカルホストUDPを呼び出すことができますか?

私は-p 8125:8125/udpでコンテナを起動してポートを開くしようとしていたが、私は次のエラーを取得しています:

デーモンがすでにこのポートで待機しているので、理にかなって
Error starting userland proxy: listen udp 0.0.0.0:8125: bind: address already in use 

したがって、コンテナがUDPペイロードを外部デーモンに送信できるようにDockerを設定するにはどうすればよいですか?

+2

通常の設定では、コンテナは(クライアントとして)送信できるものに制限されません。サーバポートを開くだけです。 UDPパケットをホストに送ることができるはずです(コンテナに見えるようにホストIPを使用し、コンテナ自体に送信する "localhost"ではなく、http://stackoverflow.com/questions/22944631/how- docker-container-inside-a-docker-container?rq = 1)のように、ドッキングできます。 – Thilo

+0

申し訳ありませんが、ホストマシン上の問題を探していましたが、問題はコンテナの中から来ていました:)明確にしてくれてありがとう – Overdrivr

答えて

3

オープニングポートは、送信しないリクエストをリッスンする場合にのみ必要です。デフォルトでは、Dockerはコンテナがホストまたは外部に通信するために必要なネットワークネームスペースを提供します。 2つの方法でそう

、あなたは可能性があり、それ:

  1. あなたは、コンテナアプリが効果的にホストのネットワークスタックを共有しているあなたのdocker run--net hostを使用し、この場合にはlocalhost:8125に要求を送信します。したがって、localhostはあなたのホストですでに動作しているデーモンを指しています。

  2. コンテナネットワークゲートウェイ(通常は172.17.0.1)またはコンテナのホストのホスト名と対話します。それであなたのホストのあなたのデーモンにパケットを送ることができます。

+1

私は、これで正確に答えることができる進行中の賞金のある質問がありますゲートウェイアドレスを呼び出すことによって2番目のオプション)。それははるかに高いレベルなどのため重複していませんが、解決策はあなたがBoynuxに提供したものです。担当者が必要な場合は、ここにリンクがあります:http://stackoverflow.com/questions/43822074/telegraf-daemon-not-receiving-metrics-from-app-deployed-with-dokku – Overdrivr

+1

それは '--netホスト'より頻繁に言及されるべきである。多くの人がそれについて知っているようです。ポートマッピングが不要で、ドッカーが実際の 'localhost'を共有していれば、そのフラグはコンテナの仮想ネットワーク全体を設定するよりもずっと簡単です(独自の' localhost'を持つ各コンテナを処理する必要があります) 。 – Thilo

関連する問題