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/. У меня была такая же проблема при попытке получить доступ к конечной точке отдыха, которая, как я предполагал, будет решена с локальным хостом, так как он работает на моем докере внутри контейнера. Вот последовательность шагов, которые помогли мне решить проблему:
- казнить
docker network ls
чтобы увидеть, сколько у вас драйверов моста. В моем случае у меня было 2 и контейнеры, где используются разные - Если у вас несколько драйверов моста, убедитесь, что вы запускаете контейнеры, которые будут общаться друг с другом, используя одну и ту же мостовую сеть.
docker run -d -t --network networkname --name containername
- Бежать
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