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

时间:2018-06-15 12:32:51

标签: docker-compose traefik

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

问题是,对于nginx服务,它只会创建一个前端 路线,通常只是静态的,或者只是媒体。就好像它找到一个,创造它 然后只是不打扰其余的。

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

搬运工-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不要获取这些服务的证书?

1 个答案:

答案 0 :(得分:2)

终于明白了。

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

所以这个:

    - "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"

之后一切正常。