@mserebryakov

Настройка поддоменов docker-compose: как обеспечить связь сервисов?

Приведу упрощённый пример
version: "3"
services:

  authservice:
    build: aggregator-auth-service
    ports:
      - "8080:8080"
    depends_on:
      - authdb
    env_file:
      - aggregator-auth-service/.env
    networks:
      - aggregator-service-network
    restart: unless-stopped

  shopservice:
    build: aggregator-shop-service
    depends_on:
      - authservice
    env_file:
      - aggregator-shop-service/.env
    ports:
      - "8081:8081"
    networks:
      - aggregator-service-network
    restart: unless-stopped

networks:
  aggregator-service-network:
    driver: bridge


Допустим мы можем обращаться к authservice с использованием поддоменов (заранее не знаем все, т.к. регистрируются в процессе работы). Отправляя запрос от shopservice к authservice (что то типа example.authservice:8080/auth), ловлю timeout. С постмана подобный запрос проходит (example.localhost:8080/auth). Видимо dns в windows перенаправляет *.localhost на localhost по дефолту. Как разрешить такое в docker? Если нужен nginx или dnsmasq, то дайте пример, опыта не имел, поэтому подробнее если можно
Из того, что пробовал с nginx:
server {
   listen 8080;
   server_name ~^(?<subdomain>.+)\.authservice$;

   location / {
       proxy_pass http://authservice:8080;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
   }
}


nginx:
    image: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - "8080:8080"
    networks:
      - aggregator-service-network


По dnsmasq вопросы:
dnsmasq:
image: andyshinn/dnsmasq
command: --address=/.authservice/<нужно указывать ip authservice>
cap_add:
- NET_ADMIN
networks:
- aggregator-service-network
restart: always
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
@ggruno
внутри одной сети контейнеры должны видить друг друга по имени из под коробки
Ничего дополнительного не нужно
из shopservice в authservice:8080 должны проходить запросы
И можно не пробрасывая порт даже
Либо если вы пробрасываете порт то можно ходить по ip хостовой машины+порт
Например 192.168.1.10:8080 и 192.168.1.10:8081
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы