docker-compose scale不适用于haproxy

时间:2017-03-27 21:05:07

标签: docker docker-compose haproxy

我正在玩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识别新容器?

2 个答案:

答案 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将自动检测新实例,重新配置自身并重新启动。