docker -создание конфигурации для доступа к контейнеру из другого проекта / сети через URL домена - PullRequest
0 голосов
/ 22 марта 2020

Это жесткий один, но было бы здорово решить его, и моя конфигурация была бы потрясающей!

У меня есть два docker -композитных проекта: нет 1. содержит конфигурацию для traefik, нет 2. содержит my-service, в качестве параметра которого http://my-domain.tld.

Цель состоит в том, чтобы вызвать (скажем, ping) http://my-domain.tld из my-service и перейти к traefik. Оба сервиса теперь находятся в одной сети, но мне нужно как-то передать конфигурацию, которая http://my-domain.tld указывает на traefik.

# Project no 1. configuration for traefik that I want to access from no 2. project
version: '3.7'
services:
  traefik:
    container_name: traefik
    networks:
      - default
networks:
  default:
    name: traefik
# Project no 2.
version: '3.7'
services:
  my-service:
    environment:
      - URL=http://my-domain.tld
    networks:
      - traefik
networks:
  traefik:
    external:
      name: traefik

Пробные решения:

Вариант а)

Не работает. Когда я вызываю http://my-domain.tld, он направляется на первый узел в сети traefik (в моем случае это был my-service). Отличие от оригинала: aliases в разделе сети.

# Project no 2.
version: '3.7'
services:
  my-service:
    environment:
      - URL=http://my-domain.tld
    networks:
      traefik:
        aliases:
          - ${MERCURE_DOMAIN}
networks:
  traefik:
    external:
      name: traefik

Вариант b)

Сбой, потому что traefik, от которого зависит обслуживание, отсутствует в проекте / сети: Service 'my-service' depends on service 'traefik' which is undefined. Различия от оригинала: depends_on и extra_hosts.

# Project no 2.
version: '3.7'
services:
  my-service:
    environment:
      - URL=http://my-domain.tld
    networks:
      - traefik
    depends_on:
      - traefik
    extra_hosts:
      - http://my-domain.tld:traefik
networks:
  traefik:
    external:
      name: traefik

вариант c)

Работает! Однако имейте в виду, что мне пришлось жестко задавать IP-адрес службы traefik. Это не худший сценарий, но он делает проект менее переносимым, и я хочу избежать этого. Отличия от оригинала: конфигурация сети для проекта № 1., stati c ip для traefik и extra_hosts для проекта № 2.

# Project no 1. configuration for traefik that I want to access from next project
version: '3.7'
services:
  traefik:
    container_name: traefik
    networks:
      default:
        ipv4_address: 172.133.239.10
networks:
  default:
    name: traefik
    driver: bridge
      ipam:
        driver: default
        config:
          - subnet: 172.133.239.0/24
# Project no 2.
version: '3.7'
services:
  my-service:
    environment:
      - URL=http://my-domain.tld
    networks:
      - traefik
    extra_hosts:
          - http://my-domain.tld:172.133.239.10
networks:
  traefik:
    external:
      name: traefik

Вариант d)

Ждет вашего предложения, как сделать это совершенным!

РЕДАКТИРОВАТЬ: переписать docker - составить конфигурацию для разделения дел, чтобы показать, что я пытался и выполнил, потому что в этом была некоторая путаница.

1 Ответ

0 голосов
/ 23 марта 2020

Если вы знаете, что имя хоста (или имя контейнера) my-service будет иметь значение c, вы можете просто вызвать его через его имя хоста (или имя контейнера, если имя хоста не было указано; по умолчанию будет использоваться имя контейнера) как имя хоста).

то есть, если my-service имеет имя хоста container1, вы можете пропинговать его следующим образом из другого контейнера (если они находятся в одной сети Docker): ping container1

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