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

时间:2018-07-22 20:04:30

标签: docker docker-networking docker-network

我有一些docker容器通过docker bridge网络一起交谈。由于无法从外部访问它们(我曾说过),因为它们是使用默认命令(不含“ expose”或“ -p”选项)从脚本启动的。我无法更改该脚本。

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

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

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

有一些容器可以自动执行此过程:

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

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

答案 1 :(得分:0)

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

如果您需要普通的tcp转发,则可以使容器运行“ socat”(socat可以用作tcp转发器)。

注意:无论哪种情况,您都将公开一个不打算在公共地址上使用的侦听器。请采取措施,禁止未经授权的连接。