【问题标题】:traefik 2.2 reverse proxy https not showing my containertraefik 2.2 反向代理 https 未显示我的容器
【发布时间】:2020-03-09 19:01:50
【问题描述】:

我正在 docker 中使用 traefik v2.2 设置测试环境。 我设置了一个名为 traefik 的 docker 网络,并带有一个测试 Web 容器。 如果我导航到https://test.com,我可以看到我的仪表板,但是我看不到我的 当我导航到规则设置的路径时的容器(即https://test.com/myapp

在仪表板中,状态显示一切正常,myapp 容器的内部 ip 显示,路由器和 https 入口点正常。

如果我转到https://test.com/myapp,它会给出一个自定义的 404 页面“错误代码说明:404 = 没有与给定的 URI 匹配。” 如果我转到https://test.com/somenonexistantpath,它会给我一个常规的 404 not found 消息

我已尝试更改主机规则。我将 traefik.docker.network=traefik 添加到容器标签中,以防它们与 traefik 容器不在同一个网络上,并验证我可以从 traefik 容器内部访问http://myapp:80。根据 traefik v2 文档,主机规则看起来是正确的,所以我想知道我是否遗漏了什么。

我确实测试了将 test.com Host 规则移动到 myapp 并且能够到达测试站点,所以我似乎缺少路径

下面是我的docker-compose文件,配置文件dynamic-traefik.yaml只有tls信息

version: '3.3'

networks:
  traefik:
    external: true



services:
  traefik:
    image: traefik:v2.2 #latest pull as of Feb 25, 2020
    container_name: traefik
    restart: always
    networks:
      - traefik
    ports:
      - "443:443"
    volumes:
      - ${PWD}/traefik:/traefik # Traefik static config
      - /var/run/docker.sock:/var/run/docker.sock:ro # SSL Development certificates
    command:
      - "--log.level=DEBUG"
      #- "--accesslog=true"
      - "--api=true"
      - "--api.dashboard=true"
      - "--api.debug=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=traefik"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.watch=true"
      - "--entrypoints.https.address=:443"
         # apparently you still neeed an extra file to specify TLS
      - "--providers.file.filename=/traefik/dynamic-traefik.yaml"
    labels:
      - "traefik.enable=true"
      # Traefik Dashboard
      - "traefik.http.routers.traefik.rule=Host(`test.com`)" #works but only gives you dashboard
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.entrypoints=https"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.docker.network=traefik"




  myapp:
    image: yeasy/simple-web:latest
    container_name: myapp
    restart: always
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.entrypoints=https"
      - "traefik.http.routers.myapp.rule=Host(`test.com`) && PathPrefix(`/myapp`)"
      - "traefik.http.routers.myapp.service=myapp"
      - "traefik.http.routers.myapp.tls=true"
      - "traefik.http.services.myapp.loadbalancer.server.port=80" #this is needed to point to the correct port on the service container
      - "treafik.docker.network=traefik"

【问题讨论】:

  • 看起来它正在查找网站,但它重定向回 test.com 而不是 test.com/myapp

标签: docker docker-compose yaml traefik


【解决方案1】:

您需要指定 priority 并为 myapp 路由器设置更高的值,以便它首先处理

【讨论】:

  • 我已经在 nginx 上运行了它,但是谢谢你,我也试试看!
【解决方案2】:

您的最后一行代码有拼写错误。

- "treafik.docker.network=traefik"

【讨论】:

    【解决方案3】:

    步骤 1. 检查服务日志找出原因 例如:something_traefik.1.3e5t2fvcipex@ip-xx-xxx-xx-21 | 2021/07/15 15:46:14 命令 traefik 错误:无法从标志中解码配置:未找到字段,节点:swarmmode \

    $docker 服务日志_traefik

    第 2 步。使用 traefik v2.x,您需要将 yaml 文件中的“命令”部分更改为如下所示。

    命令: - --providers.docker=true
    - --providers.docker.constraints=标签(traefik.constraint-label, ${DOCKER_STACK})
    - --providers.docker.exposedByDefault=false
    - --providers.docker.swarmmode=true
    - --provider.docker.watch=true
    - --api.insecure=true
    - --log.level=debug
    - --entrypoints.http.address=":xxx"

    【讨论】:

    • 嘿,您认为您可以稍微编辑一下以说明您已经完成的工作以及有关您遇到的问题的更多信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多