我希望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不要获取这些服务的证书?
答案 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"
之后一切正常。