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

Talk to server on docker container with no exposed ports

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

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

这是个好主意吗?我怎样才能将对该容器发出的每个请求转发到服务器一,然后将响应返回给主机?

谢谢

如果您尝试连接的容器是 http 服务器,您可以使用现成的容器镜像作为 http 转发器(例如 nginx - 配置起来相对容易它作为一个 http 转发器)。

如果你需要简单的 tcp 转发,你可以制作一个容器 运行 'socat'(socat 可以作为 tcp 转发器)。

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

在默认的 docker 网络中,所有端口都是公开的。所以你只需要一个容器,它向主机公开一个端口,并且与你已经创建的其他容器在同一个网络中。

这是一个比较正常的模式。你可以使用像 nginx 这样的反向代理来实现这样的事情。

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

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

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