在没有暴露端口的docker容器上与服务器对话



我有一些docker容器通过docker网桥网络进行通信。它们不能从外部访问(有人说(,因为它们是从带有默认命令的脚本中启动的,该命令不包括"expose"或"-p"选项。我无法更改那个脚本。

我想连接到其中一个容器,该容器运行服务器并侦听端口8080上的请求。我试着将那座桥连接到一个新创建的docker桥网络,但没有成功。现在我正在考虑创建一个新的容器,并让它与服务器进行通信(通过桥接网络(。由于这是一个新的contaienr,我可以使用"expose"或"-p"选项,因此它可以与主机对话。

这是个好主意吗?我如何将对该容器的每个请求转发到服务器,然后将响应返回到主机?

感谢

在默认的docker网络中,所有端口都是公开的。因此,您只需要一个向主机公开端口的容器,该容器与您已经创建的其他容器位于同一网络中。

这是一种相对正常的模式。您可以使用像nginx这样的反向代理来实现这样的功能。

有一些容器可以自动化这个过程:

https://github.com/jwilder/nginx-proxy

如果您无法控制其他容器,则需要手动编写代理配置。

如果要连接的容器是http服务器,则可以使用现成的容器映像,该映像可以用作http转发器(例如,nginx-将其配置为http转发器相对容易(。

如果您需要纯tcp转发,您可以制作一个运行"socat"的容器(socat可以作为tcp转发器(。

注意:在任何一种情况下,您都会暴露出一个不应该出现在公共地址上的侦听器。请采取措施,不允许未经授权的连接。

最新更新