如何设置 Docker 容器在私有网络上进行通信?

如何设置 Docker 容器在私有网络上进行通信?

我在 rackspace 有一个小型集群,其私有网络范围为 192.168.3.0/24。我希望我的工作服务能够使用此网络相互通信,但不知道该如何让 docker 允许这样做。

我的理想配置是一个面向公众的单一容器,该容器将连接代理到一个工作器,然后该工作器可以与私有网络内的各种服务对话以完成其工作。

eth0 -> load balancer --> 192.168.3.3:80 --> 192.168.3.5:1234 (db)
                      \-> 192.168.3.4:80 /
                       \> 192.168.3.5:80/

如果所有工人都在同一台机器上,我就可以完成此操作,docker run --link ...但由于他们在不同的机器上,所以这样做行不通。

上述示例中的工作人员使用类似如下的命令启动:

docker run -d -p $PRIVATE_IPV4:80:80 myworker

数据库启动如下:

docker run -d -p $PRIVATE_IPV4:1234:1234 mydb

来自主持人我可以很好地与每个容器通信,但每个容器无法路由到任何其他容器。IE 可以curl http://192.168.3.4从主机运行,但不能从主机上运行的容器运行。

本例中的负载均衡器是 nginx,启动方式如下:

docker run -d -p $PUBLIC_IPV4:80:80 nginx

nginx.conf

upstream app {
  server 192.168.3.3:80;
  server 192.168.3.4:80;
  server 192.168.3.5:80;
}
...

这似乎是一个非常标准的配置。我做错了什么?

答案1

您可以尝试在 CoreOS 之上的 Kubernetes 等容器管理器中实现您的架构。有很多指南。这是 DockerCon 上的演示https://www.brighttalk.com/webcast/11427/136165关于容器集群管理。

答案2

目前,Docker 本身并不提供容器网络设施。编织是最易于使用的覆盖 SDN 解决方案之一。它适用于任何云,甚至跨多个云。

我应该声明,我是 Weave 工程团队的一员。

相关内容