ECONNREFUSED nodeJS с экспресс-контейнером для докеров

Я создаю приложение nodejs, которое работает в контейнере докеров...

Это команда, которую я использовал для запуска контейнера...

sudo docker run -it --rm -p 3000:6001 --name xxx-running xxx

Выполнить над командной строкой, получить следующий вывод.

    Running on Locally
    AppEnv {
      isLocal: true,
      app: {},
      services: {},
      name: 'xxx',
      port: 6001,
      bind: '0.0.0.0',
      urls: [ 'http://localhost:6001' ],
      url: 'http://localhost:6001' }
   App started on port http://localhost:6001

Так как приложение будет вызывать стороннюю api, так что требуется модуль запроса. Каждый раз, когда запрос вызывается, я получил следующую ошибку...

{ [Error: connect ECONNREFUSED 192.155.253.83:443]
 code: 'ECONNREFUSED',
 errno: 'ECONNREFUSED',
 syscall: 'connect',
 address: '192.155.253.83',
 port: 443 }

Я знаю, возможно, это из-за записи localhost, но как я могу это изменить?

Ответ 1

Размещаете ли вы сторонний API в Docker-контейнере на localhost? Если да, то вам нужно убедиться, что сторонний контейнер док-станции api использует одну и ту же сеть. См. Https://docs.docker.com/engine/userguide/networking/. У меня была такая же проблема при попытке получить доступ к конечной точке отдыха, которая, как я предполагал, будет решена с локальным хостом, так как он работает на моем докере внутри контейнера. Вот последовательность шагов, которые помогли мне решить проблему:

  1. Выполните docker network ls чтобы узнать, сколько у вас драйверов моста. В моем случае у меня было 2 и контейнеры, где используются разные
  2. Если у вас есть несколько драйверов моста, убедитесь, что вы docker run -d -t --network networkname --name containername свои контейнеры, которые будут общаться друг с другом, используя тот же сетевой мост- docker run -d -t --network networkname --name containername
  3. Запустите docker network inspect networkname. Вы увидите детали сети со списком контейнеров. С каждым контейнером будет связан IPv4-адрес. Используйте значение этого адреса для связи вместо localhost или 127.0.0.1