如何结合docker-compose扩展和负载平衡端口暴露?

时间:2019-02-19 04:56:50

标签: docker

如果您告诉docker-compose扩展服务,并且不公开其端口,则

docker-compose scale dataservice=2

网络中将有两个DNS名称dataservice解析为IP。因此,按主机名访问的服务将实现负载平衡。

我也想对边缘代理执行此操作。重点是

docker-compose scale edgeproxy=2

会导致edgeproxy解析为2个可能的IP地址之一。

但是,公开端口的语义对此是错误的。如果我公开:

  8443:8443

然后它将尝试将每个edgeproxy绑定到主机8443。我想要的更像是:

0.0.0.0:8443:edgeproxy:8443

当您尝试通过主机8443进入docker网络时,它会随机选择一个edgeproxy:8443 IP来绑定传入的TCP连接。

是否存在仅进行端口转发的替代方法?我想要一个端口,可以让我与将解析为edgeproxy的任何IP通信。

1 个答案:

答案 0 :(得分:0)

这是由群体模式提供的。您可以使用以下方法启用单节点群集集群:

docker stack deploy -c docker-compose.yml $stack_name

然后使用以下内容将您的撰写文件部署为堆栈:

docker service

与docker compose有很多区别,包括:

  1. Swarm无法生成图像
  2. 您使用docker stop命令管理目标状态,尝试使用{{1}}停止容器将无法正常工作,因为swarm将重新启动它
  3. 撰写文件必须采用v3语法
  4. 默认情况下,网络将是覆盖网络,并且不能由群集外的容器连接

主要变化之一是,公开端口在由群集模式管理的入口网络上发布,并且连接是轮流负载平衡到您的容器。您还可以在撰写文件内定义副本计数,而无需运行scale命令。

更多信息,请访问:https://docs.docker.com/engine/swarm/