在docker-compose.yml

时间:2016-04-05 12:48:27

标签: networking docker docker-compose

微服务正在一个容器上运行。我已将该服务绑定到主机端口8082,并使用docker-compose启动了此微服务。现在我想使用docker-compose scale命令将其缩放到3个容器,但它给了我以下错误 -

  

错误:for 2无法在网络上创建端点composetest_nginx_2   composetest_default:绑定0.0.0.0:8082失败:端口已经存在   分配

     

错误:3无法在网络上创建端点composetest_nginx_3   composetest_default:绑定0.0.0.0:8082失败:端口已经存在   分配

这会是什么解决方案?

4 个答案:

答案 0 :(得分:10)

你不应该捆绑3个容器'端口到主机中的同一端口。

你可以做的是设置:

  • 1个负载均衡器容器(将容器&#39的端口绑定到主机端口8082)

  • 3个服务容器(将端口暴露给负载均衡器)

bind仅将1个端口绑定到主机。并且expose仅将端口暴露给链接容器,因此它们可以来自多个容器。

参考:

https://www.brianchristner.io/how-to-scale-a-docker-container-with-docker-compose/

https://github.com/vegasbrianc/docker-compose-demo/blob/master/docker-compose.yml

答案 1 :(得分:0)

如果您使用的是Nginx或类似的产品,则可以使用docker-gen命令在Nginx中自动更新配置。

有关更多信息,请参见此:https://deployeveryday.com/2016/09/28/composing-docker-environments-scale.html

答案 2 :(得分:0)

好的选择是在docker-compose中给range端口而不是给特定端口...

ports:
 - 8081+:8081

通过这种方式,您可以扩展服务而不会遇到您提到的问题(端口已分配),因为每个扩展实例的主机端口将有所不同,而Docker将为您处理。 ..

答案 3 :(得分:0)

我通过使用正确的语法传递端口范围来解决它:P

ports:
      - "9110-9120:3333"