【问题标题】:Port forwarding problem using Traefik and docker-compose使用 Traefik 和 docker-compose 的端口转发问题
【发布时间】:2021-06-03 15:21:24
【问题描述】:

我想要下一个端口转发:

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 做到这一点?

【问题讨论】:

    标签: docker-compose proxy port reverse-proxy traefik


    【解决方案1】:

    要让 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容器暴露即可。

    【讨论】:

    • 感谢您的回答。我根据您的建议更新了 docker-compose.yml,但仍然收到 HTTP 错误 404
    • 你能展示你更新的 docker-compose 吗?
    • 这是一个适合您的工作示例:pastebin.com/59t0nRsH 请不要使用--api.insecure=true,这是不安全
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2020-11-19
    • 2023-03-19
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多