Как сделать так, чтобы traefik автоматически назначал одному интерфейсу докера внешнего интерфейса одно и то же изображение? - PullRequest
1 голос
/ 26 апреля 2019

Я начинаю преобразовывать все свои systemd-nspawn контейнеры в решения docker и traefik, и мне удалось автоматически создать внешний интерфейс при запуске docker контейнера (бэкэнда).

Я хотел бы, чтобы несколько контейнеров запускались с одного и того же образа докера (каждый с автоматически созданным именем), чтобы присоединить его к интерфейсу, имя которого я бы назначил. Возможна ли такая настройка?

Другими словами, сегодня, когда я запускаю

# docker run myimage
# docker run myimage
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5b4af3466ba6        wazaa               "/bin/sh -c 'python …"   About an hour ago   Up About an hour    5000/tcp            cranky_montalcini
59b1be83bf98        wazaa               "/bin/sh -c 'python …"   About an hour ago   Up About an hour    5000/tcp            inspiring_goldwasser

, я получаю два контейнера (cranky-montalcini и inspiring-goldwasser на скриншоте ниже и вывод docker ps выше), которым назначены два внешних интерфейса.Я, с другой стороны, хотел бы, чтобы они были назначены одному myfrontend.example.com, который каким-то образом распознал бы, что контейнеры, порожденные из myimage, предназначены для него.

enter image description here

1 Ответ

1 голос
/ 26 апреля 2019

Мне не совсем понятно, о чем вы спрашиваете, поэтому мои извинения, если этот ответ не совсем подходит. У вас должен быть только один «интерфейс» (который является вашим контейнером traefik). Traefik сопоставляет новые контейнеры с бэкэндами в зависимости от их имени. Если вы хотите, чтобы два контейнера с разными именами рассматривались как часть одного и того же бэкэнда (так что запросы, направленные на этот бэкэнд, будут циклически перебираться между ними), вы можете установить метку traefik.backend. Например, это сделает следующие два контейнера членами foo бэкэнда:

docker run --label traefik.backend=foo some_image
docker run --label traefik.backend=foo another_image

Это предполагает, конечно, что вы также настроили соответствующий traefik.frontend.rule, который будет направлять трафик к этому конкретному бэкэнду.

См. https://docs.traefik.io/configuration/backends/docker/ для получения дополнительной информации.

...