【问题标题】:Traefik 2 Gateway TimeoutTraefik 2 网关超时
【发布时间】:2020-07-15 14:45:44
【问题描述】:

所以我有以下 docker-compose.yml

version: "3.7"

services:
    roundclinic-mysql:
        image: mysql:5.7
        networks:
            - spring-boot-mysql-network
        environment:
            - MYSQL_DATABASE=
            - MYSQL_USER=
            - MYSQL_PASSWORD=
            - MYSQL_ROOT_PASSWORD=
        volumes:
            - ./mysqldata:/var/lib/mysql:rw,delegated
        ports:
            - "3306:3306"
    web-service:
        image: roundclinic/roundclinic:latest
        networks:
            - spring-boot-mysql-network
            - traefik-network
        depends_on:
            - roundclinic-mysql
        ports:
            - 8080:8080
        environment:
            - "SPRING_PROFILES_ACTIVE=dev"
        links:
            - roundclinic-mysql
        labels:
            - "--providers.docker.network=traefik_default"
            - "traefik.enable=true"
            - "traefik.http.routers.roundclinic.rule=Host(`api-dev.roundclinic.app`)"
            - "traefik.http.routers.roundclinic.entrypoints=web"
            - "traefik.http.services.cal.loadbalancer.server.port=8080"
    traefik:
        image: "traefik:v2.2"
        container_name: "traefik"
        command:
            - "--log.level=DEBUG"
            - "--api.insecure=true"
            - "--providers.docker=true"
            - "--providers.docker.exposedbydefault=false"
            - "--entrypoints.web.address=:80"
            - "traefik.docker.network=traefik-network"
        ports:
            - "80:80"
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
    traefik-network:
        driver: bridge
        external: true
    spring-boot-mysql-network:
        driver: bridge
volumes:
    my-db: 

spring boot 启动正常,可以连接mysql。

当我连接到http://api-dev.roundclinic.app:8080/../ 时,我可以很好地访问我的应用程序

当我连接到http://api-dev.roundclinic.app/../ 时,我得到网关超时。我可以在 traefik 日志中看到它正在将请求转发到似乎正确的 IP 和端口,但实际应用程序没有任何影响。我不确定这里发生了什么。有什么帮助吗?

【问题讨论】:

  • 我无法重现此撰写文件的问题。您能否提供更多数据,例如使用它的数据库凭据是什么?但是我认为问题出在端口80 周围,因为那是一个保留的端口号,并且默认情况下不会轻易在没有权限的情况下使用它

标签: docker-compose traefik


【解决方案1】:

当访问端口 8080 时,您绕过 Traefik 并直接访问您的应用程序,对吗?

一般来说,Traefik 标签看起来不错。定义了入口点、端口和主机,存在路由器和服务端口。这些通常是基于 Docker 的设置的所有要求。

我注意到的一件事是traefik 容器使用"traefik.docker.network=traefik-network",但您的网络应用使用: "--providers.docker.network=traefik_default".

我不确定traefik_default 是否是 traefik 提供的东西,但可能是网络名称不匹配的问题。

我无法测试这是否是问题,但这是首先要检查的。 一种方法是简化配置,但始终使用 docker compose 中的 networks 键,而不是将其与标签和参数混合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2018-03-23
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多