一尘不染

ECONNREFUSED nodeJS在docker容器中具有express

docker

我正在构建一个在docker容器中运行的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条目,但是如何更改呢?


阅读 234

收藏
2020-06-17

共1个答案

一尘不染

您是否将第三方api托管在localhost上的docker容器中?如果是,那么您需要确保第三方api
docker容器共享同一网络。请参阅https://docs.docker.com/engine/userguide/networking/。我尝试访问其余端点时遇到了相同的问题,我认为它将与本地主机一起解决,因为它在容器内部的docker上运行。以下是一系列步骤,可帮助我解决问题:

  1. 执行docker network ls以查看您有多少个桥驱动程序。在我的情况下,我有2个和使用不同容器的容器
  2. 如果您有多个网桥驱动程序,请确保您启动的容器将使用相同的网桥网络相互通信 docker run -d -t --network networkname --name containername
  3. 运行docker network inspect networkname。您将看到带有容器列表的网络详细信息。每个容器将具有与其关联的IPv4Address。使用这些地址的值而不是localhost或127.0.0.1进行通信
2020-06-17