Почему traefik добавляет часть «докер» в правило внешнего интерфейса? - PullRequest
0 голосов
/ 01 мая 2019

Я запускаю несколько док-контейнеров с docker-compose и ожидаю, что traefik автоматически создаст Host правила на основе имени контейнера и домена.Это то, что, как я считаю, всегда было в прошлом.

Домен установлен в traefik.toml через domain = "example.com", а шаблон правила оставлен по умолчанию.

проблема заключается в том, что в правилах хоста есть часть имени элемента .docker.:

{
  "docker":{
    "backends":{
      "backend-traefik-docker":{
        "servers":{
          "server-docker-traefik-1-b8a648f1d4e2b692fb0a888a6a920124":{
            "url":"http://172.22.0.4:80",
            "weight":1
          }
        },
        "loadBalancer":{
          "method":"wrr"
        }
      },
      "backend-web-docker":{
        "servers":{
          "server-docker-web-1-5d8b13ed7d68cab587a76ca7083edea3":{
            "url":"http://172.22.0.3:80",
            "weight":1
          }
        },
        "loadBalancer":{
          "method":"wrr"
        }
      },
      "backend-whoami-docker":{
        "servers":{
          "server-docker-whoami-1-b63b00b9e018119bfbb2dee19bcc8f9e":{
            "url":"http://172.22.0.2:80",
            "weight":1
          }
        },
        "loadBalancer":{
          "method":"wrr"
        }
      }
    },
    "frontends":{
      "frontend-Host-nginx-docker-localhost-1":{
        "entryPoints":[
          "http"
        ],
        "backend":"backend-web-docker",
        "routes":{
          "route-frontend-Host-nginx-docker-localhost-1":{
            "rule":"Host:nginx.docker.localhost"
          }
        },
        "passHostHeader":true,
        "priority":0,
        "basicAuth":null
      },
      "frontend-Host-traefik-docker-example-com-2":{
        "entryPoints":[
          "http"
        ],
        "backend":"backend-traefik-docker",
        "routes":{
          "route-frontend-Host-traefik-docker-example-com-2":{
            "rule":"Host:traefik.docker.example.com"
          }
        },
        "passHostHeader":true,
        "priority":0,
        "basicAuth":null
      },
      "frontend-Host-whoami-docker-example-com-0":{
        "entryPoints":[
          "http"
        ],
        "backend":"backend-whoami-docker",
        "routes":{
          "route-frontend-Host-whoami-docker-example-com-0":{
            "rule":"Host:whoami.docker.example.com"
          }
        },
        "passHostHeader":true,
        "priority":0,
        "basicAuth":null
      }
    }
  }
}

Например, Host:whoami.docker.example.com на самом деле должно быть Host:whoami.example.com (без учета .docker., который приходитоткуда-то).

Файлы конфигурации довольно смешанные (я пробовал с defaultRule в traefik.toml и без него):

# cat docker-compose.yaml
version: '3'

services:
  traefik:
    image: traefik
    ports:
      - "80:80"
      - "8082:8080"
    volumes:
      - $PWD/traefik/traefik.toml:/etc/traefik/traefik.toml

  whoami:
    image: containous/whoami

  web:
    image: nginx

# cat traefik/traefik.toml

debug = true
[entryPoints]
[entryPoints.http]
address = ":80"
[docker]
endpoint = "tcp://192.168.10.2:2375"
domain = "example.com"
defaultRule = "Host(`{{ normalize .Name }}`)"
watch = true
exposedByDefault = true
usebindportip = true
swarmMode = false
swarmModeRefreshSeconds = 15
network = "web"
[api]
dashboard = true

Примечание: я знаю, что могудобавить label в определение service в docker-compose.yaml (а именно 'traefik.frontend.rule=Host:thecontainername.example.com'), но я хочу установить поведение по умолчанию.

...