假设我有两个Web服务说它们是docker-compose部署的w1
和w2
。
现在,我想为它们中的每一个创建多个容器,并在它们前面创建一个负载平衡器,以使此服务可以访问:
http://localhost:8880 //for service w1
http://localhost:8888 //for service w2
我搜索了,然后得到dockercloud-haproxy和nginx-proxy。
但是,不建议使用前者,而后者必须与主机名一起使用以区分不同的服务。
设置不同的主机尤其复杂,尤其是在开发环境中。
然后我找到了traefik。似乎更可配置。这是我使用的配置文件:
version: "3"
services:
w1:
image: jwilder/whoami
labels:
- "traefik.backend=whoami"
- "traefik.protocol=http"
- "traefik.port=8080"
- "traefik.frontend.entryPoints=http_8080"
w2:
build: . # a simple node server which use port 80
labels:
- "traefik.backend=node"
- "traefik.protocol=http"
- "traefik.port=80"
- "traefik.frontend.entryPoints=http_80"
lb:
image: traefik
command: "--docker \
--logLevel=DEBUG \
--entryPoints='Name:http_80 Address::80' \
--entryPoints='Name:http_8080 Address::8080'"
ports:
- 8880:80
- 8888:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock
虽然它仍然不能满足我的要求。
这可能还是任何其他替代解决方案?
最佳答案
您需要在w1和w2下添加匹配器-"traefik.frontend.rule=PathPrefixStrip:/"
。否则,默认为Host:w1.project_name
。
另外,我相信jwilder / whoami使用端口8000而不是8080,因此将- "traefik.port=8080"
更改为- "traefik.port=8000"
关于docker - 带有traefik的docker中没有主机的不同站点中多个站点的负载均衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54006729/