我希望你能帮助我,提前谢谢!
我有一个包含三个服务traefik, app and service-x
的docker-compose文件。app
可以有许多示例,我使用traefik实现了一个负载平衡器/反向代理,它工作正常。app
在内部调用service-x
,service-x
也可以有许多示例,但是当app
调用http://service-x
时,它总是对同一个示例(第一个示例)进行调用,因此我想知道是否有一种方法可以实现负载平衡机制,以便当我调用service-x
时,它分布在所有示例中?
这是简化的Docker-Composer文件:
services:
traefik:
image: "traefik"
restart: always
command:
- "--api=true"
...
ports:
- "80:80"
- "443:443"
app:
image: app:latest
labels:
- "traefik.enable=true"
...
ports:
- "3000"
restart: on-failure
links:
- service-x
service-x:
image: service-x:latest
ports:
- "8001"
1条答案
按热度按时间mf98qq941#
我想知道是否有一种方法可以实现负载平衡机制,这样当我调用service-x时,它就分布在所有示例中了。
这是docker-compose的默认行为。如果您没有看到这种行为,我怀疑是您使用了过时的
links
参数。当您将container附加到同一用户定义的网络(默认情况下是这样做的)时,它们可以使用Docker自动维护的DNS服务按名称相互引用。此外,这与您的问题没有直接关系,对于只在内部使用的服务,您不需要
ports
条目。对于一个实际的例子,看一下
docker-compose.yaml
:在上面的示例中,
service-x
运行的是this image,它运行一个Web服务器,该服务器报告其主机名和一些其他元数据。app
服务的角色由nginx扮演,使用以下配置:使用上面的配置,对
http://127.0.02
的请求(具有example.com
的Host
头)将转到app
服务,然后该服务将该请求代理到service-x
服务。如果我们调出多个
service-x
的示例,就像这样:这样我们就有了:
然后通过Traefik提出多个请求:
我们看到请求在
service-x
容器之间循环:备注:
127.0.0.2
?因为我已经有一个服务在端口80上侦听127.0.0.1
。