【问题标题】:Directly connect two docker containers直接连接两个docker容器
【发布时间】:2018-05-11 13:15:59
【问题描述】:

我打算做的是让所有进入我的 http 服务器 (C2) 的流量都需要通过一个黑盒容器 (C1)。将C2的默认网关设为C1的eth1。

我尝试这样做,但找不到方法,因为即使我创建了一个新网络,也会创建一个新的网桥,并且两个容器不会直接连接。

这不可能吗?如果是,有谁知道如何实现?

【问题讨论】:

  • 那些是虚拟网卡吗?在所有情况下,从技术上讲,您应该能够做到这一点:两个 C1/C2 之间的一个子网和一个到 eth1 IP 的默认网关。
  • 是的,它都是虚拟的。但是当我使用 docker 创建子网时,它也会创建一个网桥
  • "它还创建了一个网桥" 网桥是透明设备,因此您基本上是直接连接连接到网桥的任何设备。以太网交换机是一座桥,虽然连接到交换机的设备是电气隔离的,但在数据链路层,它们是直接连接的,因为交换机对数据链路层是透明的。
  • 不在网络级别,但在应用程序级别,您可以使 C1 成为反向代理服务器,将流量转发到 C2,因此外部世界只能看到 C1,除非通过 C1 路由,否则 C2 不可访问 ...要么自己动手,要么在 C1 中为这样的服务器使用 nginx 之类的东西......这种方法适用于跨平台

标签: docker networking containers virtualization


【解决方案1】:

至少在 linux 上可以。但不是 docker 本身。您可以创建一对 veth 设备,并将其中一个推送到 c1 容器的网络命名空间,并将 veth 的另一侧推送到 c2 容器的 ns。确保您为该适配器分配了 ips 并配置了正确的转发/路由/nat。

【讨论】: