#docker #docker-compose #traefik #jwilder-nginx-proxy
Вопрос:
Я пытаюсь представить некоторые приложения, использующие traefik и nip.io
Мой файл docker-compose выглядит следующим образом
version: '3.3'
services:
traefik:
image: traefik:1.7-alpine
command: --web --docker --docker.domain=app.test --logLevel=DEBUG
ports:
- 80:80
- 8080:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
whoami:
image: tons/whoami-go
labels:
- "traefik.port=8080"
- "traefik.frontend.rule=Host:whoami.127.0.0.1.nip.io"
Но я не могу дозвониться до своей службы
$ curl -vvv whoami.127.0.0.1.nip.io
Приведенное выше возвращает 404, и полный подробный вывод будет
$ curl -vvv whoami.127.0.0.1.nip.io
* Trying 127.0.0.1:80...
* Connected to whoami.127.0.0.1.nip.io (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: whoami.127.0.0.1.nip.io
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Vary: Accept-Encoding
< X-Content-Type-Options: nosniff
< Date: Mon, 19 Apr 2021 12:07:29 GMT
< Content-Length: 19
<
404 page not found
* Connection #0 to host whoami.127.0.0.1.nip.io left intact
Это прекрасно работает, когда я это делаю
$ curl -vvv -H "Host: whoami.127.0.0.1.nip.io" localhost
И полный результат очень похож
$ curl -vvv -H "Host: whoami.127.0.0.1.nip.io" localhost
* Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: whoami.127.0.0.1.nip.io
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 12
< Content-Type: text/plain; charset=utf-8
< Date: Mon, 19 Apr 2021 12:12:13 GMT
<
* Connection #0 to host localhost left intact
49d197f2d4ae⏎
Примечательно, что заголовок хоста правильно отправляется с обоими запросами.
У меня та же проблема с использованием jwilder/nginx-прокси, но у меня нет проблем, когда я использую nip.io с помощью Kubernetes ingress независимо от использования Traefik или Nginx.
Кто-нибудь имеет представление о том, что случилось?
ОБНОВЛЕНИЕ: Это работает на Mac моих друзей и на виртуальной машине ubuntu, но не на моей коробке Fedora
Ответ №1:
Вы можете использовать основной домен, настроив HostRegexp. например : — «traefik.http.routers.app1.rule=HostRegexp( app1.{ip:.*}.nip.io
)» Полная информация https://traefik.me