Docker HTTP-запросы между контейнерами

Я на первом этапе обучения использованию Docker, поэтому я пробую основные вещи. Я создал две службы Node Express, которые должны обмениваться данными через HTTP-запросы.

мой

networks:
  isolation-network:
    driver: bridge

services:
  service1-nodejs:
    build:
    context: ./service1/
    dockerfile: .docker/node.dockerfile
    ports:
      - "10000:9000" 
      - "10001:5858" 
    env_file: ./service1/.docker/env/app.${APP_ENV}.env
    networks:
      - isolation-network

  service2-nodejs:
    build:
    context: ./service2/
    dockerfile: .docker/node.dockerfile
    ports:
      - "10010:9000" 
      - "10011:5858" 
    env_file: ./service2/.docker/env/app.${APP_ENV}.env
    networks:
      - isolation-network

service1 использует запрос модуль сделать POST-запрос на service 2.

request({ url: "http://service2:10010/api/",
                method: "POST",
                headers: { "Content-Type": "application/json" },
                json: true,
                body: { ... },
                time: true
            }, function (err, res, body) {
                if (!err && res.statusCode == 200) {
                    // success
                }

                // failed
            });

результатом этого вызова является:

{ ошибка: подключение ECONNREFUSED 172.18.0.3: 10010}

С помощью почтальона я могу проверить service2 at http://localhost:10010/api/ и я могу подтвердить, что они фактически могут быть достигнуты и работать, как ожидалось.

Я что-то упускаю, но не могу разобраться. Что здесь не так?

1 ответов


документ. Порт 10010 является портом хоста, но не портом контейнера. Вы должны использовать 9000 при доступе к service2 контейнер напрямую.

Так что просто изменить "http://service2:10010/api/" to "http://service2:9000/api/" и оно будет работать.