ECONNREFUSED nodeJS с экспресс-внутри контейнера Docker

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

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

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, но как я могу это изменить?

2 ответа

Решение

Размещаете ли вы сторонний 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
  3. Бежать docker network inspect networkname, Вы увидите детали сети со списком контейнеров. С каждым контейнером будет связан IPv4-адрес. Используйте значение этого адреса для связи вместо localhost или 127.0.0.1

Когда ваше приложение получает доступ, localhost обращается к локальному хосту контейнерной сети, для localhost вашей среды попробуйте добавить --network host в вашей команде запуска, например:

      -sudo docker run --network host -it --rm -p 3000:6001 --name xxx-running xxx
Другие вопросы по тегам