docker - 带有traefik的docker中没有主机的不同站点中多个站点的负载均衡器

标签 docker docker-compose traefik

假设我有两个Web服务说它们是docker-compose部署的w1w2

现在,我想为它们中的每一个创建多个容器,并在它们前面创建一个负载平衡器,以使此服务可以访问:

http://localhost:8880 //for service w1

http://localhost:8888 //for service w2

我搜索了,然后得到dockercloud-haproxynginx-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/

相关文章:

docker - 如何在 Traefik v2.3 中使用粘性 session ?

node.js - Dokku 构建失败 - 预接收 Hook 被拒绝

docker - Hyperledger Fabric CLI 容器错误

python - 如何每天在Azure上运行一个短暂运行的Docker容器?

docker - 更改Docker容器变量

docker - 如何通过docker-compose使docker容器与localstack docker容器通信?

ruby-on-rails - 当 BUNDLE_PATH 随 Docker 更改时,捆绑程序找不到已安装的 gem

azure - Traefik 与 Service Fabric — 无法连接到 Service Fabric 服务器

kubernetes - 使用Traefik + Kubernetes管理超过2k的加密证书

docker - 如何复制从Internet获取的Docker镜像并将其移至未连接Internet的主机?