docker-compose: связь между сервисами не работает должным образом - PullRequest
0 голосов
/ 28 июня 2019

Я создал api, который собирает данные из нескольких источников (в этих примерах они отправляют запросы на 88 и 99 пунктов), а затем предоставляет совокупность этих данных через несколько конечных точек. Затем у меня есть два приложения, которые получают данные из этого API и делают визуализацию. Я точно определил эту проблему: хотя docker-compose документация (любые учебные пособия) ясно заявляет:

Важно отметить различие между HOST_PORT и CONTAINER_PORT. В приведенном выше примере для db значение HOST_PORT равно 8001, а порт контейнера - 5432 (postgres по умолчанию). Сетевая сервис-связь использует CONTAINER_PORT. Когда HOST_PORT определен, сервис доступен и вне роя.

... но мои 2 приложения по-прежнему не могут получить доступ к API.

Если я выставляю свой порт api в обоих приложениях, я получаю сообщение об ошибке, что этот порт уже задан (как ожидается, для документов), но я не могу понять, почему эти приложения не могут вызывать api без предоставления портов (isn ' т это межсервисная связь?). Я также нашел несколько одинаковых решений с nginx , но, поскольку это мой собственный проект для свободных людей, я хотел бы узнать, в чем я не прав, и сделать это правильно, потому что, очевидно, я что-то неправильно понимаю из документации. Моя цель сейчас состоит в том, чтобы только два приложения могли выполнять вызов API. Пока это на одном хосте. Может кто-нибудь помочь с решением или советами и идеями?

Мой текущий docker-compose

services:
  host:
    image: "api_host"
    ports:
      - 88:88
      - 99:99
  app1:
    image: "app"
    ports:
      - 7777:7777
  app2:
    image: "app"
    ports:
      - 8888:8888```

1 Ответ

0 голосов
/ 28 июня 2019

Проблема в том, что, хотя ваш файл compose вызывает 3 контейнера, эти контейнеры не объединены в сеть. Чтобы исправить это, определите сеть для них в файле compose. Это гарантирует, что ваш хост и API могут взаимодействовать друг с другом через указанные порты. Это также позволит вам вызывать API и хосты на основе имени службы (то есть в файле конфигурации).

Пример создания с сетью:

services:
  host:
    image: "api_host"
    ports:
      - 88:88
      - 99:99
    networks:
      - myapinetwork
  app1:
    image: "app"
    ports:
      - 7777:7777
    networks:
      - myapinetwork
  app2:
    image: "app"
    ports:
      - 8888:8888```

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