2017-01-04 9 views
2

ドッカーとJavaネットワークの問題で困っています。私はいくつかのコンテナをdocker-composeで起動しています。いくつかは他の人と話す必要があります。例えば、あるコンテナはRabbitMQを開始し、もう1つはRabbitMQに接続します。コンテナ名を使用してURLに接続すると、すべて正常に動作します。しかし、私は実際のドッカーのホスト名のアドレスを使用したいので(私が使用する設定ファイルはドッカーのコンテナの外部のマシンから利用できるようになります)、これは奇妙なことに失敗します。 それでは、私は二つの容器を持っているとしましょう:MessageConsumerのは、アクセスamqp://rabbitmq:5672に設定されている場合はpingは動作しますが、JavaコードはDockerでホストに到達できません。

  • RabbitMQの
  • のMessageConsumer

、それが正常に接続されています。しかし、私のコンテナはホストdocker.mycompany.comで実行中です。私がamqp://docker.mycompany.com:5672をURLとして使用すると、私のmessageconsumerのJavaコードbarfsはjava.net.NoRouteToHostException: Host is unreachableとなります。

しかし、メッセージコンシューマーコンテナでシェルを起動すると、ping docker.mycompany.comが機能します。なぜシェルとpingはホストアドレスを見つけますが、Javaは見つけませんか?私のイメージはopenjdk:alpineに基づいています。

+0

おそらく関連:https://docs.docker.com/engine/userguide/networking/default_network/binding/ – nwinkler

+0

ポートをコンテナからホストにマッピングしていますか? Dockerはデフォルトでこれを行いません。したがって、amqp:// rabbitmq:5672は同じDockerネットワーク上のコンテナを解決して接続しますが、特に設定しない限り、amqp://docker.mycompany.com:5672は接続しませんなど。 –

+0

はい、ポートがマップされており、外部からコンテナにアクセスできます。 –

答えて

0

私はちょうど同じことをしました。私は詳細な答えはなく、おそらくそうではありませんが、これを解決したHOSTネットワークを使用しているようです。

私はこの理想を主張することはありませんが、誰かがより良い答えを思い付くまで、あなたはあなたを得るでしょう。

関連する問題