Docker-compose не может выполнять кросс-контейнерные запросы

У меня проблемы с сетью при запуске служб в docker-compose. По сути, я просто пытаюсь сделать запрос на получение через Kong к простому API Flask, который я настроил. Docker-compose.yml ниже версии: "3.0"

services:
  postgres:
    image: postgres:9.4
    container_name: kong-database
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_DB=kong

  web:
    image: kong:latest
    container_name: kong
    environment:
      - DATABASE=postgres
      - KONG_PG_HOST=postgres
    restart: always
    ports:
      - "8000:8000"
      - "443:8443"
      - "8001:8001"
      - "7946:7946"
      - "7946:7946/udp"
    links:
      - postgres

  ui:
    image: pgbi/kong-dashboard
    container_name: kong-dashboard
    ports:
      - "8080:8080"
  employeedb:
    build: test-api/
    restart: always
    ports:
       - "5002:5002"

Добавляю API в конг командой curl -i -X POST --url http://localhost:8001/apis/ --data name=employeedb --data upstream_url=http://localhost:5002 --data hosts=employeedb --data uris=/employees. Я пробовал это со многими комбинациями входных данных, включая разные имена, передавая IP-адрес сети Docker и имя test-api в качестве имени хоста для upstreamurl. После добавления API в Kong я получаю

HTTP/1.1 502 Bad Gateway
Date: Tue, 11 Jul 2017 14:17:17 GMT
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: kong/0.10.3

Кроме того, я попал в контейнеры докеров, на которых запущен docker exec it <container-id> /bin/bash, и попытался сделать запросы curl к ожидаемой конечной точке фляги. Находясь в контейнере, в котором запущен API, я смог выполнить успешный вызов как localhost:5002/employees, так и employeedb:5002/employees. Однако, делая это из контейнера, работающего под управлением Kong, я вижу

curl -iv -X GET --url 'http://employeedb:5002/employees'
* About to connect() to employeedb port 5002 (#0)
*   Trying X.X.X.X...
* Connection refused
* Failed connect to employeedb:5002; Connection refused
* Closing connection 0

Мне не хватает какой-то конфигурации, которая предоставляет контейнеры друг другу?


person William Hammond    schedule 11.07.2017    source источник


Ответы (1)


Вам нужно сделать контейнер employeedb видимым для конга, определив link, как вы это сделали с базой данных PostgreSQL. Просто добавьте его как дополнительную запись прямо под - postgres, и он должен быть доступен Конгу:

....
links:
  - postgres
  - employeedb

....
person JSchirrmacher    schedule 30.07.2017