горячие перезагрузки правил внешнего интерфейса traefik в файле при использовании докеров - PullRequest
0 голосов
/ 18 января 2019

Я хотел бы иметь возможность перезагрузить правила внешнего интерфейса, но с помощью док-контейнеров.

Можно ли получить правила внешнего интерфейса traefik, определенные в файле И , используя имена контейнеров докеров в качестве бэкэндов?

Текущая конфигурация докера : работает, но жестко закодирован / не может быть перегружен

docker run -d -p 8080:8080 -p 80:80 -v $PWD:/etc/traefik -v /var/run/docker.sock:/var/run/docker.sock traefik

docker run -d --name v1 -l "traefik.frontend.rule=PathPrefix:/,/foo" emilevauge/whoami 

docker run -d --name v2 -l "traefik.frontend.rule=PathPrefix: /bar" emilevauge/whoami 

/ и /foo перейти к контейнеру v1; /bar перейти к v2. Отлично.

Задача состоит в том, чтобы перезагрузить правила внешнего интерфейса. Пример: я хочу, чтобы "бар" был на v1 сейчас.

Моя идея состояла в том, чтобы переключиться на «файловую» конфигурацию (поскольку изменения файлов отслеживаются и, следовательно, могут быть перегружены)

Но я застрял в настройке бэкэндов. Могу ли я использовать имя контейнера там?

Вот что я попробовал:

  • добавление внутренней метки в контейнер docker run -d --name v1 -l "traefik.backend=v1" emilevauge/whoami
  • Добавление этого rules.toml файла (который загружается в горячем режиме!)
[frontends]
    [frontends.v1]
        backend = "backend-v1"
        [frontends.v1.routes.test]
        rule = "PathPrefix: /,/foo"
    [frontends.v2]
        backend = "backend-v2"
        [frontends.v2.routes.test]
        rule = "PathPrefix: /bar"

К сожалению, это не работает. Похоже, мне нужно объявить и бэкэнды в файле.

Как я могу объявить свой бэкэнд для существующих контейнеров?

[backends]
    [backends.v1]
        --> here something to reference container v1
    [backends.v2]
        --> here something to reference container v2  

это вообще возможно? Или я просто делаю что-то в корне не так?

...