2016-09-27 164 views
2

是否有可能配置dockercloud/haproxy多於一個後端服務但監聽不同的端口?我試圖在端口80上爲一個web前端獲得一個docker-compose配置,然後在8080上運行一個Spring Boot應用程序。dockercloud haproxy在不同的端口上有多個服務

默認情況下,haproxy顯示web和addressbook的鏈接容器(請參閱下面的.yml文件),但默認情況下它們都通過happroxy在端口80上公開,所以Spring Boot容器永遠不會收到流量8080.

該配置是否可能,或者我是否也需要運行2個不同的haproxy容器,一個用於Web,另一個用於REST後端服務?

這裏是我的搬運工,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 

回答

0

可以暴露HAProxy的容器的同一端口上使用兩種不同的路徑,無論是兩個服務。您可以使用環境變量VIRTUAL_HOSTaddressbookweb容器做到這一點:

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路徑,所以你需要以管理更新兩個應用程序一個「基本路徑」。

0

對我來說,使用Traefik來實現目標更容易。

addressbook: 
    image: addressbook 
    depends_on: 
    - mongo 
    environment: 
    - MONGODB_DB_NAME=addressbook 
    labels: 
    - "traefik.backend=spring_boot" 
    - "traefik.protocol=http" 
    - "traefik.port=8080" 
    - "traefik.frontend.entryPoints=http_8080" 
    ports: 
    - "8080" 
    links: 
    - mongo 

web: 
    image: docker-web-angularjs 
    labels: 
    - "traefik.backend=nginx" 
    - "traefik.protocol=http" 
    - "traefik.port=80" 
    - "traefik.frontend.entryPoints=http_80" 
    ports: 
    - "80" 

lb: 
    image: traefik 
    command: "--web --web.address=8081 --docker --docker.domain=docker.localhost \ 
      --logLevel=DEBUG \ 
      --entryPoints='Name:http_80 Address::80' \ 
      --entryPoints='Name:http_8080 Address::8080'" 
    ports: 
    - 80:80 
    - 8080:8080 
    - 8081:8081 
    volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /dev/null:/traefik.toml 
相關問題