微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Traefik 和 docker-compose

如何解决使用 Traefik 和 docker-compose

我要下一个端口转发:

http://traefik.service.localhost/ -> Traefik UI

http://api.service.localhost/ -> 'Hello-Word' page from api-service

这是我尝试创建适当的 docker-compose.yml 文件

version: '3.8'

services:

  reverse-proxy:
    image: traefik:v2.4
    container_name: reverse-proxy
    command: 
      - "--api.insecure=true"
      - "--providers.docker"
    ports:
      - "80:80"
      - "8080:8080"
    labels:
      - traefik.enable=true
      - traefik.docker.network=pred-network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - pred-network


  api-service:
    image: x86_64/prediction-service:0.8.1
    container_name: api-service
    environment:
      SERVING_SERVICE: model-service
    expose:
      - 80
    labels:
      - traefik.enable=true
      - traefik.http.routers.api-service.rule=Host(`api.service.localhost`)
    networks:
      - pred-network

networks:
  pred-network:

我得到以下信息:

http://traefik.service.localhost/ -> HTTP Error 404. The requested resource is not found.

http://api.service.localhost/ -> HTTP Error 404. The requested resource is not found.

唯一有效的链接

http://api.service.localhost:8080/ -> Traefik UI

如果我要包括

ports:
  - "8070:80"

进入docker-compose.ymlapi-service部分,我可以访问我的“Hello-Word”: http://localhost:8070/ -> "Hello-Word" 在这种情况下,它不会通过 Traefik 路由,而是直接通过 api-service。是否可以通过 Traefik 实现?

解决方法

要让 traefik 使用 docker 路由服务,您应该有标签。 Traefik 将获取这些标签以了解如何进行路由。

因此,要将 api.service.localhost 的请求路由到您的 api 服务,您应该具有定义相应 rule 的标签:

traefik.http.routers.service.rule=Host(`api.service.localhost`)

至于Traefik的标签,你应该有两个标签:

traefik.http.routers.traefik.rule=Host(`traefik.service.localhost`)
traefik.http.routers.traefik.service=api@internal

除了那些 traefik 标签之外,您应该通过添加以下配置告诉 traefik 使用特定服务公开仪表板:--api.dashboard(更多帮助以公开仪表板 here)。

注意,如果您的 api 服务使用默认端口以外的端口,您可以添加此标签:

traefik.http.services.service.loadbalancer.server.port=80 

Ps,不要暴露两次80端口,你只需要暴露给traefik容器即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。