ドッカーと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に基づいています。
おそらく関連:https://docs.docker.com/engine/userguide/networking/default_network/binding/ – nwinkler
ポートをコンテナからホストにマッピングしていますか? Dockerはデフォルトでこれを行いません。したがって、amqp:// rabbitmq:5672は同じDockerネットワーク上のコンテナを解決して接続しますが、特に設定しない限り、amqp://docker.mycompany.com:5672は接続しませんなど。 –
はい、ポートがマップされており、外部からコンテナにアクセスできます。 –