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

标签 docker-compose traefik

我希望 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"

之后一切正常。

关于docker-compose - Traefik docker-compose 仅​​创建一个前端路由而不是 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50875714/

相关文章:

nginx - 使用 Let's encrypt 获得的 SSL 证书的访问权限

Docker-compose 挂起附加到

socket.io - 使用 Traefik 或 NGINX 在 Docker Swarm 上正确处理 Socket.io

docker - 使用 Docker 的 Traefik 反向代理

kubernetes - GCE 负载均衡器背后的 Kubernetes (GCE/GKE) 上的 Traefik

mongodb - docker-compose在mongodb中创建用户

docker - 如何在部署时运行docker-compose

docker - docker-compose up 完成后显示消息成功

docker - Traefik 2.0 "port is missing"用于内部仪表板

nginx - traefik 与 nginx 入口 Controller