Я хотел бы иметь возможность перезагрузить правила внешнего интерфейса, но с помощью док-контейнеров.
Можно ли получить правила внешнего интерфейса 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
это вообще возможно? Или я просто делаю что-то в корне не так?