Несколько сетей докеров в одном контейнере - PullRequest
1 голос
/ 06 июля 2019

У меня есть конфигурация стека докеров с оверлейной сетью под названием traefik.Он содержит мой traefik контейнер с обратным прокси-сервером и несколько контейнеров, которые обслуживают различные субдомены.Я добавляю новый, который потребуется для доступа к серверу базы данных, который я создал в другом контейнере, поэтому я добавил что-то вроде этого:

networks:
  traefik:
    driver: overlay
  database:
    driver: overlay

services:
  traefik:
    image: traefik
    networks:
      - traefik
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      # ...

  # ...

  database:
    image: postgres:9.6-alpine # match what's being used by heroku
    networks:
      - database

  staging:
    image: staging
    networks:
      - traefik
      - database
deploy:
  labels:
    traefik.enable: "true"
    traefik.frontend.rule: Host:lotto-ticket.example.com
    traefik.docker.network: traefik
    traefik.port: 3000

Когда я это сделал, запустился обратный проксивозвращает коды времени ожидания шлюза, указывающие, что контейнер staging больше не был доступен для сети traefik.Если я удаляю сеть database из контейнера staging, дочерний домен работает должным образом (хотя он явно не может получить доступ к базе данных), и когда я добавляю его обратно, обратный прокси-сервер начинает получать тайм-ауты от него.

Есть ли какой-то конфликт между двумя сетями?Нужно ли настраивать IP-маршрутизацию для использования нескольких сетей докеров в одном контейнере?

РЕДАКТИРОВАТЬ: добавлено больше подробностей в отрывок конфигурации

1 Ответ

2 голосов
/ 06 июля 2019

Вы должны указать traefik, в какой сети подключаться к вашему сервису, используя метку traefik.docker.network. В вашем случае эта метка будет установлена ​​на ${stack_name}_traefik, где ${stack_name} - это имя вашего стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...