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