dockercloud haproxy在不同端口上有多个服务

时间:2016-09-27 15:28:33

标签: docker spring-boot docker-compose haproxy

是否可以使用多个后端服务配置dockercloud / haproxy但是在另一个端口上侦听?我试图让端口80上的nginx使用docker-compose配置进行Web前端,然后使用8080上的容器运行Spring Boot应用程序。

默认情况下,haproxy会看到web和addressbook的链接容器(请参阅下面的.yml文件),但默认情况下,它们都是由happroxy在端口80上公开的,因此Spring Boot容器永远不会在8080上接收流量

这个配置是否可行,或者我是否需要运行2个不同的haproxy容器,一个用于Web,一个用于REST后端服务?

到目前为止我的docker-compose.yml:

version: '2'

#build:
#  context: ./haproxy
#  image: haproxy
# dockerfile: Dockerfile

services:
    mongodata:
        image: mongo:3.2
    volumes:
    - /data/db
    entrypoint: /bin/bash
mongo:
    image: mongo:3.2
    depends_on: 
        - mongodata
    volumes_from:
        - mongodata
    ports:
    #only specify internal port, not external, so we can scale with docker-compose scale
        - "27017"
addressbook:
    image: addressbook
    depends_on: 
        - mongo
    environment:
        - MONGODB_DB_NAME=addressbook
    ports:
        - "8080"
    links:
        - mongo
web:
    image: docker-web-angularjs
    ports:
        - "80"
lb:
    image: dockercloud/haproxy
    #TODO: need to add an haproxy.cfg to configure for addressbook instances exposed behind 8080?
    #or can be configured via container properties?
    #image: haproxy
    depends_on: 
        - addressbook
    environment:
        - STATS_PORT=1936
        - STATS_AUTH="admin:password"
    links:
        - addressbook
        - web
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock
    ports:
        - 80:80
        - 8080:8080
        - 1936:1936

2 个答案:

答案 0 :(得分:1)

对我而言,使用Traefik来实现目标更容易。

if ((a[i] > 0 && sum > INT_MAX - a[i]) || (a[i] < 0 && sum < INT_MIN - a[i]))
{
    fprintf(stderr,"%s","Sum has overflown");
    exit(1);
}

答案 1 :(得分:0)

您可以使用两个不同的路径公开这两个服务,这两个路径都位于haproxy容器的同一端口上。您可以使用VIRTUAL_HOSTaddressbook容器的环境变量web执行此操作:

addressbook:
    image: addressbook
    depends_on: 
        - mongo
    environment:
        - MONGODB_DB_NAME=addressbook
        - VIRTUALHOST="/addressbook/*"
    ports:
        - "8080"
    links:
        - mongo
web:
    image: docker-web-angularjs
    environment:
        - VIRTUALHOST="/web/*"
    ports:
        - "80"

很遗憾,默认情况下,haproxy不会删除webaddressbook路径,因此您需要更新这两个应用以管理“基本路径”。