Рейтинг:0

Docker+Synapse+Traefik v2 перестает работать, когда я создаю отдельную серверную сеть

флаг ch

Я пытаюсь настроить сервер Matrix Synapse с помощью Docker и обратного прокси-сервера Traefik v2.

Моя настройка работает, если я определяю одну сеть в своем файле для создания докеров, и все Traefik, Synapse и postgres используют эту сеть.

Однако, основываясь на том, что я уже узнал о Docker, я должен разместить postgres в отдельной сети (поддерживаемый), чем Траефик (сеть). После этого Synapse будет в обеих сетях. Однако, когда я это делаю, я больше не могу подключиться к Synapse. Время истекло, в конце концов говоря Время ожидания шлюза.

Как будто Synapse только слушает серверная часть сеть.

версия: '3.2'
Сервисы:
  синапс:
    имя_контейнера: синапс
    имя хоста: ${MATRIX_HOSTNAME}
    изображение: docker.io/matrixdotorg/synapse:latest
    перезапуск: если не остановлен
    среда:
      - SYNAPSE_SERVER_NAME=${MATRIX_HOSTNAME}
      - SYNAPSE_REPORT_STATS=да
      - СИНАПСЕ_НО_TLS=1
      - SYNAPSE_ENABLE_REGISTRATION=нет
      - SYNAPSE_LOG_LEVEL=ОТЛАДКА
      - SYNAPSE_REGISTRATION_SHARED_SECRET=${REG_SHARED_SECRET}
      - POSTGRES_DB=синапс
      - POSTGRES_HOST=дБ
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    # разоблачать: 
    # - "8008"
    тома:
      - тип: связать
        источник: /опт/сервисы/синапс
        цель: /данные
    зависит от:
      - дб
    сети:
      - сеть
      - бэкенд
    этикетки:
      - "traefik.enable=true"
      - "traefik.http.routers.synapse.rule=Host(`${MATRIX_HOSTNAME}`)"
      - "traefik.http.services.synapse.loadbalancer.server.port=8008"
      - "traefik.http.routers.synapse.entrypoints=websecure"
      - "traefik.http.routers.synapse.tls.certresolver=myresolver"
      - "traefik.docker.network=веб"

  дБ:
    изображение: docker.io/postgres:10-alpine
    имя_контейнера: "synapse_db"
    перезапуск: если не остановлен
    среда:
      - POSTGRES_DB=синапс
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    тома:
      - /opt/services/synapse_db:/var/lib/postgresql/data
    сети:
      - бэкенд
    этикетки:
      - "traefik.enable=false"
  
  трафик:
    изображение: трафик: v2.5
    имя_контейнера: "traefik"
    команда: 
      - "--api.insecure=истина"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=веб"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.myresolver.acme.email=${CERTBOT_EMAIL}"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    порты:
      # Маршрутизатор перенаправляет 443 в WAN на 8443 на хосте, поэтому нам не нужны права root
      - "8443:443"
      - "8080:8080"
    сети:
      - сеть
    тома:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./letsencrypt:/letsencrypt"
    рестарт:
      если не остановлен

сети:
  веб:
  серверная часть:

И в Synapse домашний сервер.yaml файле есть раздел, который мог бы позволить мне привязаться к определенному интерфейсу, но я не вносил никаких изменений, поэтому по умолчанию он должен прослушиваться на всех интерфейсах:

слушатели:
  - порт: 8008
    тлс: ложь
    тип: http
    x_forwarded: правда

    Ресурсы:
      # - имена: [клиент, федерация]
      - имена: [клиент]
        сжать: ложь

Если я перехожу к одной настройке сети, она работает. Что я делаю неправильно с настройкой двух сетей?

Рейтинг:1
флаг co

Traefik не знает, к какому IP-адресу контейнера следует попытаться подключиться. ты близок с traefik.docker.network=веб но это не совсем название сети. Сеть получит префикс для имени проекта или стека.

Чтобы жестко закодировать имя сети, вы можете использовать поле имени в последнем разделе сети (это относится к версии 3.5 или новее):

версия "3.5"
Сервисы:
  ...
сети:
  веб:
    имя: сеть
  серверная часть:

В противном случае установите проект в свою метку (обычно это имя текущего каталога при использовании docker-compose):

 этикетки:
 ...
  - "traefik.docker.network=имя_вашего_проекта_здесь_веб"
флаг ch
Это имеет смысл, спасибо. Я предполагаю, что веб-имя необходимо обновить как в аргументе командной строки для traefik, так и в метке под синапсом?
флаг co
@TimMB метка переопределит аргумент CLI traefik, но да, это хорошая идея, чтобы они все совпадали.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.