如何设置 docker 容器以在专用网络上进行通信?

bhe*_*ole 5 linux-networking docker

我在机架空间有一个小型集群,其专用网络范围为 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/
Run Code Online (Sandbox Code Playgroud)

如果所有工人都在同一台机器上,我可以用它来完成这项工作,docker run --link ...但由于他们在不同的机器上,这将行不通。

上面示例中的工作人员使用类似于以下的命令启动:

docker run -d -p $PRIVATE_IPV4:80:80 myworker
Run Code Online (Sandbox Code Playgroud)

数据库是这样开始的:

docker run -d -p $PRIVATE_IPV4:1234:1234 mydb
Run Code Online (Sandbox Code Playgroud)

主机我可以很好地与每个容器通信,但每个容器都不能路由到任何其他容器。IEcurl http://192.168.3.4在主机上工作,但不能从主机上运行的容器中工作。

在这种情况下,负载均衡器是 nginx 启动的,如下所示:

docker run -d -p $PUBLIC_IPV4:80:80 nginx
Run Code Online (Sandbox Code Playgroud)

配置文件

upstream app {
  server 192.168.3.3:80;
  server 192.168.3.4:80;
  server 192.168.3.5:80;
}
...
Run Code Online (Sandbox Code Playgroud)

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

小智 0

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