2017-01-19 28 views
3

私のホスト上で動作するアプリケーションは、ポート4001(設定可能)をリッスンし、信頼できるIPアドレスのホワイトリスト(127.0) .0.1はデフォルトでのみ追加できますが、マスクを使用せずに1つずつ追加できます)。DockerコンテナはIPホワイトリストを使用してホストアプリケーションに接続できません

(これは、Javaで実行されるインタラクティブブローカーゲートウェイアプリケーションだが、私はそれが重要だとは思わない)

私は、ホストアプリケーションに接続する必要がドッキングウィンドウコンテナ内で実行している別のアプリケーションを持っています。

(これは、IBのAPIにアクセスするPythonアプリケーションだが、再び私は問題ないと思います)

は最終的に、私は同じことをやろうとしている複数のマシン上に複数のコンテナ意志を持っているが、私はいなくてもできますそれは同じマシン上で実行されているものと一緒に働いてください。

sudo docker run -t myimage 

Error: Couldn't connect to TWS. Confirm that "Enable ActiveX and Socket Clients" is enabled on the TWS "Configure->API" menu. 

(ホストマシン上のIBゲートウェイからの応答がありません)

彼らは、特定のIP上にあるかのように、すべてのドッキングウィンドウのコンテナが表示されるように、理想的に私は/ブリッジをドッキングウィンドウコンテナを設定することができるだろうアドレスを追加し、ホワイトリストに追加してください。

私が試したもの:0.0.0.0:4001が失敗したMYIMAGE

バインドのための4001::ポート-pと

sudoのドッキングウィンドウラン4001 -p -tを公開使用

1)すでに割り当てられています。

(ゲートウェイからの応答がありません)

このeithierは仕事や紛争「既に使用中のポート」につながるものではありません。私はこれらの設定が反対の問題(ホストはコンテナの特定のポートを見ることができない)のために設計されていることを知ります。ソケットを読みながらキャッチ

2)設定--net =ホスト

須藤ドッカー実行-t --net =ホストMYIMAGE

例外 - ピアゲートウェイから

(無応答による接続リセット)

ドッキング用のコンテナは127.0.0.1のように見えるはずですが、これはうまくいくはずですが、そうではありません。 --net =ホストを設定し、ホワイトリストにコメントで提案されているように、ローカルホストの実際のIPアドレス192.168.0.12を()を追加

3)

sudoのドッキングウィンドウの実行-t --net =ホストMYIMAGE

ソケットの読み取り中にキャッチ

例外 - ピアによって接続リセット

(ゲートウェイからの応答がありません)

4)(ホストアプリケーション上のホワイトリストに、2 ... 172.17.0.1、... 3を添加ブリッジネットワークは172.17.0です。0およびその後の容器がこの範囲に割り当てられ得る)

sudo docker run -t myimage 

Error: Couldn't connect to TWS. Confirm that "Enable ActiveX and Socket Clients" is enabled on the TWS "Configure->API" menu. 

(ホストからの応答なし)

これは恐ろしくハックであるがeithier機能しません。

PSこれは、ホストアプリケーションIB Gatewayをコンテナ内で実行しようとする問題とは異なることに注意してください。

ホストアプリケーションを別のコンテナ内で実行することは望ましくありませんが、いくつかの点ではこれはきちんとした解決策になるかもしれません。

+0

あなたの質問はホワイトリストに容器ipsを追加する方法ですか? – mayid

+0

ホワイトリストに追加することはできますが、(a)動作しません(何か問題があります:コンテナはホストコンピュータのポート4001にアクセスできません)。(b)それは非常に不満足な解決策ですIPアドレスが何であるかは保証されておらず、個別の100のIPアドレスを追加することを意味する可能性があります – robcarver

+0

これ以上説明できませんか? "理想的には、すべてのドッカーコンテナが特定のIPアドレスにあるかのように表示されるように、ドッキング用のコンテナ/ブリッジをセットアップして、ホワイトリストに追加してください。 –

答えて

2

IBゲートウェイを実行するには、接続することを含め、さまざまなレベルで扱いにくく、特にプロセスを自動化する必要がある場合があります。

私たちは他のIPからの接続を注意深く見て、最終的にそれを断念しました。ゲートウェイに接続できるホワイトIPの設定がありますが、動作しないためスクリプトできません。

ビルドプロセスでは、ドッカーベースイメージを作成し、ゲートウェイとそのゲートウェイクライアントのすべてまたはすべてをそのイメージに追加します。その後、最終的なイメージを実行します。

2

(OPの代わりに掲示)

--net=hostを設定し、同じネットワーク上のゲートウェイのライブバージョンと競合しないように、ポートを4001から変更します。ホワイトリストに必要な唯一のIPアドレスは127.0.0.1です。

sudo docker run -t --net=host myimage 
1

socatを使用して、ゲートウェイから任意のアドレスで待機できる新しいポートにポートを転送します。そして、あなたは、コンテナの外からゲートウェイに接続することができますたとえば、ポート4002でリッスンするようにゲートウェイを設定します(ローカルホストのみ)と4001 にポートを転送するための容器に

socat tcp-listen:4001,reuseaddr,fork tcp:localhost:4002

をコマンドを使用します。パラメータ-p 4001:4001でコンテナを実行するときにポート4001を使用します。

関連する問題