Связь между микросервисами с помощью docker-compose и traefik - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть приложение на основе микросервиса.Я использую docker, docker-compose и traefik для обнаружения сервисов.

В данный момент у меня есть 2 микросервиса:

  • серверное приложение: запущено на node-app.localhost: 8000
  • поисковый микросервис, работающий на search-microservice.localhost: 8002

Проблема: я не могу сделать запрос от одного микросервиса к другому.Вот моя конфигурация docker compose:

# all variables used in this file are defined in the .env file
version: "2.2"
services:
  node-app-0:
    container_name: node-app
    restart: always
    build: ./backend/server
    links:
      - ${DB_HOST}
    depends_on:
      - ${DB_HOST}
    ports:
      - "8000:3000"
    labels:
      - "traefik.port=80"
      - "traefik.frontend.rule=Host:node-app.localhost"
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --api --docker # Enables the web UI and tells Traefik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  search-microservice:
    container_name: ${CONTAINER_NAME_SEARCH}
    restart: always
    build: ./backend/search-service
    links:
      - ${DB_HOST}
    depends_on:
      - ${DB_HOST}
    ports:
      - "8002:3000"
    labels:
      - "traefik.port=80"
      - "traefik.frontend.rule=Host:search-microservice.localhost"
volumes:
  node-ts-app-volume:
    external: true

И приложение-узел, и микросервис поиска предоставляют порт 3000.

Почему я не могу позвонить http://search -microservice.localhost: 8002 из приложения узла?хотя вызов из браузера работает.

1 Ответ

0 голосов
/ 19 февраля 2019

Поскольку node-app является контейнером, и для доступа к другим контейнерам он должен использовать имя службы и внутренний порт .

В вашем случае это search-microservice:3000.

Чтобы получить доступ к хост-компьютеру и открытым портам, вы должны использовать имя host.docker.internal для всех служб и внешнего порта.

...