微服务正在一个容器上运行。我已将该服务绑定到主机端口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失败:端口已经存在 分配
这会是什么解决方案?
答案 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"