Traefik docker-compose 只创建一个前端路由而不是 3 个

Traefik docker-compose only creating one frontend route instead of 3

我希望 traefik 将特定路径路由到我的 nginx 服务。 下面的设置适用于我的开发环境,但不适用于实时 环境。

问题是,对于 nginx 服务,它只会创建前端之一 路由,通常只是静态的,或者只是媒体。就好像它找到了一个,创造了它 然后就不再理会其他的了。

如果我重新启动我的容器,那么 traefik 将只随机执行其中一条路线 再次,但从来没有像在我的开发机器上那样全部 3 个。

docker-compose.yml

version: '3'

services:

    db:
        image: postgres:latest

    webapp:
        build:
        context: ./src/webapp/
        env_file:
        - .env
        volumes:
        - "./resources:/mnt/resources/"
        depends_on:
        - db
        links:
        - "db:dbhost"
        labels:
        - "traefik.backend=webapp"
        - "traefik.port=8000"
        - "traefik.webapp.entryPoints=https"
        - "traefik.webapp.frontend.rule=Host:my.domain.example"

    nginx:
        build:
        context: ./src/nginx/
        volumes:
        - ./resources:/mnt/resources
        labels:
        - "traefik.backend=nginx"
        - "traefik.port=443"
        - "traefik.frontend.entryPoints=https"
        - "traefik.static.frontend.rule=Host:my.domain.example;PathPrefix:/static"
        - "traefik.media.frontend.rule=Host:my.domain.example;PathPrefix:/media"
        - "traefik.sw.frontend.rule=Host:my.domain.example;Path:/service-worker.js"

    traefik:
        image: traefik:1.6.3
        restart: always
        ports:
        - "80:80"
        - "443:443"
        - "8080:8080"
        volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./src/traefik/traefik.toml:/traefik.toml
        - ./src/traefik/acme.json:/acme.json

一个单独的问题,但仍然与 traefik 相关:

Traefik 应该为 main.domain 获取 letsencrypt 证书,并且这样做了 非常适合该域。

但它也在尝试为 db 和 traefik 服务获取证书。 我如何告诉 traefik 不要为这些服务获取证书?

终于想通了。

对于没有生成的前端,我基本上必须为每个前端指定一个后端,然后它们按预期工作。

所以这样:

    - "traefik.static.frontend.rule=Host:my.domain.example;PathPrefix:/static"
    - "traefik.media.frontend.rule=Host:my.domain.example;PathPrefix:/media"
    - "traefik.sw.frontend.rule=Host:my.domain.example;Path:/service-worker.js"

...变成了这个:

    - "traefik.static.backend=nginx-static"
    - "traefik.static.frontend.rule=Host:my.domain.example;PathPrefix:/static"
    - "traefik.media.backend=nginx-media"
    - "traefik.media.frontend.rule=Host:my.domain.example;PathPrefix:/media"
    - "traefik.sw.backend=nginx-sw"
    - "traefik.sw.frontend.rule=Host:my.domain.example;Path:/service-worker.js"

之后一切正常。