我正在玩docker-compose haproxy和nginx。 我想要实现的是,如果我将nginx容器缩放为
docker-compose scale nginx = 2
haproxy容器也代理新的nginx容器。但不知怎的,它没有认出新的容器。
以下是我的配置:
搬运工-compose.yml:
version: '2.1'
services:
nginx:
image: 'bitnami/nginx:latest'
healthcheck:
test: "curl -f http://localhost/?healthcheck"
expose:
- "80"
haproxy:
image: haproxy
restart: always
depends_on:
nginx:
condition: service_healthy
links:
- nginx
ports:
- "80:80"
volumes:
- ./haproxy:/usr/local/etc/haproxy/
expose:
- "80"
haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
defaults
log global
mode http
option httplog
timeout connect 5000
timeout client 10000
timeout server 10000
frontend localnodes
bind 0.0.0.0:80
mode http
default_backend nodes
backend nodes
mode http
option forwardfor
balance roundrobin
server nginx nginx:80 check
option httpchk GET /?haproxyselfcheck
http-check expect status 200
如果不手动将另一个nginx添加到docker-compose文件中,我可以做些什么来让haproxy识别新容器?
答案 0 :(得分:1)
在做了一些研究之后,我找到了一个与docker swarm一起工作的解决方案。 Docker swarm有自己的负载均衡器。但是,为了最好地适应服务的反向代理似乎是来自传奇人物Victor Farcic https://github.com/vfarcic/docker-flow-proxy
的docker-flow-proxy然后可以将新服务添加到代理中。
答案 1 :(得分:1)
或者,使用dockercloud-haproxy
:
HAProxy映像,用于在链接容器之间取得平衡,如果在Docker Cloud中启动或使用Docker Compose v2,则在链接集群成员重新部署,加入或离开时重新配置。
还有:
您可以通过三种不同的方式使用
dockercloud/haproxy
:
- 在Docker Cloud中运行(云模式)
- 使用Docker旧版链接(传统模式)运行
- 使用Docker Compose v2(Compose Mode,与Docker Swarm兼容)
运行- 使用Docker SwarmMode(Swarm模式)运行
例如:
docker-compose scale nginx=5
haproxy
将自动检测新实例,重新配置自身并重新启动。