Я запускаю несколько док-контейнеров с 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'
), но я хочу установить поведение по умолчанию.