Traefik的多个域

问题描述

我是Traefik的新手,但尝试从jwilder / nginx-proxy迁移到letencrypt-companion到Traefik。 我已经使用以下配置文件安装了Traefik: traefik.yml

entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https    
  websecure:
    address: :443

api:
  dashboard: true
  insecure: true

certificatesResolvers:
  le:
    acme:
      email: username@gmail.com
      storage: acme.json
      httpChallenge:
        # used during the challenge
        entryPoint: web

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false

docker-compose.yml

version: '3'

services:
  traefik:
    image: traefik:v2.2
    restart: always
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /data/disk1/traefik/traefik.yml:/traefik.yml
      - /data/disk1/traefik/acme.json:/acme.json
    container_name: traefik

在域#1上启动一个容器时

docker-compose.yml

version: "3"

services:
  confluence:
    container_name: confluence
    image: atlassian/confluence-server:7.6.2
    volumes:
      - /data/disk1/atlassian/application-data/confluence:/var/atlassian/application-data/confluence
    ports:
      - "8090:8090"
    external_links:
      - postgres:postgres
    environment:
      - CATALINA_CONNECTOR_PROXYNAME=confluence.tld
      - CATALINA_CONNECTOR_PROXYPORT=443
      - CATALINA_CONNECTOR_SCHEME=https
      - CATALINA_CONNECTOR_SECURE=true
      - VIRTUAL_HOST=confluence.tld
      - VIRTUAL_NETWORK=web
      - VIRTUAL_PORT=8090
      - LETSENCRYPT_EMAIL=user@tld
      - LETSENCRYPT_HOST=confluence.tld
    labels:
      - traefik.enable=true
      - traefik.http.routers.confluence.rule=Host(`confluence.tld`)
      - traefik.http.routers.confluence.tls=true
      - traefik.http.routers.confluence.tls.certresolver=le
      - traefik.http.routers.confluence.service=confluence
      - traefik.http.services.confluence.loadbalancer.server.port=8090
    networks:
      - web
    restart: always
networks:
  web:
    external:
      name: web

效果完美。 注意:我暂时保留了jwilder / nginx-proxy的环境变量 当启动另一个具有不同tld的容器时,我无法正常工作。

例如 docker-compose.yml

version: "3"

services:
  confluence:
    container_name: myapp
    image: nginx:latest
    volumes:
      - /data/disk1/myapp/www/:/usr/share/nginx/html:ro
      - /data/disk1/myapp/conf/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9999:80"
    environment:
      - VIRTUAL_HOST=www.tld2,tld2
      - VIRTUAL_NETWORK=web
      - VIRTUAL_PORT=9999
      - LETSENCRYPT_EMAIL=user@tld2
      - LETSENCRYPT_HOST=www.tld2,tld2
    labels:
      - traefik.enable=true
      - traefik.http.routers.myapp.rule=Host(`tld2`) || Host(`www.tld2`)
      - traefik.http.routers.myapp.tls=true
      - traefik.http.routers.myapp.tls.certresolver=le
      - traefik.http.routers.myapp.service=tld2
      - traefik.http.services.myapp.loadbalancer.server.port=9999
    networks:
      - web
    restart: always
networks:
  web:
    external:
      name: web

它不起作用,但在Traefik仪表板中一切正常。 有什么想法吗?

解决方法

第二个import {TouchableOpacity,Text} from 'react-native'; export default class Hormones extends Component { state = {gender: "Male"} ... render () { return ( <> <TouchableOpacity onPress={()=> { this.setState( { gender: this.state.gender==="Male"?"Female":"Male" }); } > <Text>Switch Gender</Text> </TouchableOpacity> this.switchGender(this.state.gender); </> ); } } 中有一个错误:

您将名为docker-compose.yml的路由器定义为使用名为mypp的服务:

tld2

但是您的服务名为traefik.http.routers.myapp.service=tld2

myapp

这应该在Traefik的日志中产生了有关无法解决的服务的错误。

要解决此问题,请将路由器traefik.http.services.myapp.loadbalancer.server.port=9999配置为使用服务myapp

myapp

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...