2016-12-13 4 views
1

私はこの回答をどこからでも探しています。私にとっては明らかな疑問のように思えますが、答えは私には分かりません。別のコンテナにあるアプリケーション間のドッカー通信

現在の設定では、同じブリッジネットワーク上にredis、mongodb、および2つのapiサーバーがあります。最初のサーバーはすべての認証を行い、特定のAPIコールを公開するゲートウェイAPIとして機能します。バックエンドAPIは、dbのやりとりとデータの操作をすべて処理するAPIです。私がバックエンド(内側)APIだけを押すと、内容を見ることができます(実際のプロダクション環境では公開されません)。しかし、私がゲートウェイAPI内から同じ要求をすると、私が作成したブリッジされたネットワークの一部でもあるバックエンド(内部)APIにヒットできません。

以下は、コンテナのやり取りの図です。

Docker container interaction

+0

Inner APIへの接続に使用するGateway APIのアドレスは何ですか?そして、あなたは普通のDockerでこれを実行していますか?作成する?この設定を行うために実行するコマンドを投稿できますか? – johnharris85

+0

私は今、それを持っている方法は、プレーンドッカー、0.0.0.0:8090で公開されているゲートウェイAPI、内部APIは0.0.0.0:8099として公開されています。 'docker run --net = isolated_network -itd -v/volume:/ opt/volume --name busybox1 -p 8010:8090ビジーボックス「someコマンド」 ドッカー実行--net = isolated_network -itd -v/volume2 :/ opt/volume2 --name busybox2 -p 8010:8090 busybox "some command 2" – ericg

答えて

0

私はまだ、従来のリンクを使用しますが、私はこれに慣れて少しです。問題は、あなたのゲートウェイコンテナの中から "localhost"を打つことを試みていることだと思います。内部APIコンテナは、ゲートウェイAPIコンテナの内部で "localhost"として解決することはできません。あなたは "localhost:8099"をホストマシンから、またはポートマッピングのために外部からヒットすることができますが、他のコンテナはそのアドレス/ポートを解決することができません。

ここに私が何を考えているかをテストする方法があります。ホストのシェルで、bridge inspectコマンド(here)を実行します。 IPアドレスをContainersからコピーします。 <inner-api-hash>IPV4。その後、ゲートウェイコンテナ内のシェルをdocker exec -it <gateway-id> /bin/bashで開き、curlまたはwgetを使用して、コピーしたIPアドレスにヒットできるかどうかを確認します。

私の考えが正しい場合は、他のコンテナから内部APIノードのDocker割り当てIPアドレスを使用する必要があることがわかります。その他のオプションの中では、hereのように静的IPアドレスを持つコンテナを起動できます。

これは私の知識の範囲を逸脱し始めていますが、コンテナDNSを設定することもできます。 Configure container DNS

+0

ゲートウェイapiから内部APIを呼び出すときに、コンテナが作成された時に与えられた名前で内部ゲートウェイを呼び出しています: 'curl -X GET http:// busybox2/api/resource/one' – ericg

+0

あなたが提案したことを試しましたが、busybox2とコンテナに割り当てられたipの両方をpingできます。しかし、名前+ポートコンボは機能していません。私はネットワークブリッジのセットアップがあるかどうか、私はbusybox2コンテナにポートを公開する必要がありますか?あるいは、その名前で十分でしょうか? – ericg

+0

文書では、「このデフォルトネットワークのコンテナは、IPアドレスを使用して相互に通信することができます.Dockerは、デフォルトのブリッジネットワーク上で自動サービス検出をサポートしていません。だから、名前を使用するだけで、それ以上の設定をしなければ動作しません。 – gregbert

関連する問題