是否可以使用多个后端服务配置dockercloud / haproxy但是在另一个端口上侦听?我正在尝试使用端口80上的nginx为web前端设置docker-compose配置,然后在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 回答
对我来说,使用Traefik来实现目标更容易 .
您可以使用两个不同的路径公开这两个服务,这两个路径都位于haproxy容器的同一端口上 . 您可以使用环境变量
VIRTUAL_HOST
为addressbook
和web
容器执行此操作:不幸的是,默认情况下,haproxy不会删除
web
或addressbook
路径,因此您需要更新这两个应用程序才能管理"base path" .