我有一个在我的主机上运行的应用程序,它具有以下功能:它侦听端口 4001(可配置)并且只接受来自受信任 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
sudo docker run -t -p 4001:4001 myimage
绑定 0.0.0.0:4001 失败:端口已分配。
(网关无响应)
这两个都不起作用或导致“端口已在使用”冲突。我收集这些设置是为相反的问题设计的(主机看不到容器上的特定端口)。
2) 设置 --net=host
sudo docker run -t --net=host myimage
读取套接字时捕获异常 - 对等方重置连接
(网关没有响应)
这应该可以工作,因为 docker 容器现在看起来应该是 127.0.0.1 ......但事实并非如此。
3)设置--net=host并将本地主机的真实IP地址192.168.0.12(如评论中所建议)添加到白名单
sudo docker run -t --net=host myimage
读取套接字时捕获异常 - 对等方重置连接
(网关没有响应)
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,但也不起作用。
PS 请注意,这与尝试在容器内运行主机应用程序 IB 网关的问题不同——我没有这样做。
我不想在另一个容器中运行主机应用程序,尽管在某些方面这可能是一个更简洁的解决方案。