Docker容器无法连接到使用IP白名单的主机应用程序

我有一个在我的主机上运行的应用程序,它具有以下function:监听端口4001(可configuration),只接受来自可信IP地址的白名单的连接(默认情况下为127.0.0.1,其他地址可以添加一个,不使用面具)。

(这是在Java中运行的交互式中间人网关应用程序,但我不认为这很重要)

我有另一个应用程序运行在Docker容器内,需要连接到主机应用程序。

(这是一个访问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网关没有回应)

理想情况下,我可以设置docker容器/网桥,以便所有docker容器看起来好像在一个特定的IP地址,将其添加到白名单,瞧。

我试过了:

1)使用-p和EXPOSE

sudodocker运行-t -p 4001:4001 myimage

绑定0.0.0.0:4001失败:端口已分配。

(没有来自网关的响应)

这位智者不工作或导致“港口已在使用”的冲突。 我认为这些设置是针对相反的问题devise的(主机无法看到容器上的特定端口)。

2)设置–net =主机

sudodocker运行-t –net =主机myimage

读取套接字时捕获exception – 由对等方重置连接

(没有来自网关的响应)

这应该工作,因为docker集装箱现在应该看起来像127.0.0.1 …但它不。

3)设置–net = host,并将本地主机的真实IP地址192.168.0.12(如评论所示)添加到白名单

sudodocker运行-t –net =主机myimage

读取套接字时捕获exception – 由对等方重置连接

(没有来自网关的响应)

4)在主机应用程序的白名单中添加172.17.0.1,… 2,… 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. 

(主机没有回应)

这是可怕的hacky,但不工作eithier。

PS注意这与尝试在容器内运行主机应用程序IB网关的问题不同 – 我不这样做。

我不想在另一个容器中运行主机应用程序,尽pipe在某些方面可能是更好的解决scheme。

运行IB网关在很多不同的层面上都很棘手,包括连接到它,特别是如果你想自动化这个过程。

我们仔细研究了从其他IP连接到它,最后放弃了它 – 网关错误,据我们所知。 有一个白色的IP可以连接到网关的设置,但它不工作,不能编写脚本。

在我们的构build过程中,我们创build一个docker基础镜像,然后将网关和任何/所有网关的客户端添加到该镜像。 然后我们运行最后的图像。

(代表OP发布)

设置--net=host并将端口从4001更改为与同一networking上的网关的实时版本不冲突。 白名单中唯一需要的IP地址是127.0.0.1。

 sudo docker run -t --net=host myimage 

使用socat将端口从网关转发到可监听任何地址的新端口。 例如,将网关设置为侦听端口4002(仅限本地主机)并在容器中使用命令

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

将端口转发到4001.然后,当使用参数-p 4001:4001运行容器时,可以使用端口4001从容器外部连接到网关。

Interesting Posts