【问题标题】:ECONNREFUSED nodeJS with express inside docker containerECONNREFUSED nodeJS 与 docker 容器内的 express
【发布时间】:2016-09-01 00:31:40
【问题描述】:

我正在构建一个在 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,所以需要request模块。 每次调用请求时,我都会收到以下错误...

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

我知道可能是因为 localhost 条目,但是我该如何更改呢?

【问题讨论】:

    标签: node.js docker request


    【解决方案1】:

    您是否将第三方 api 托管在 localhost 的 docker 容器中?如果是,那么您需要确保第三方 api docker 容器共享相同的网络。见https://docs.docker.com/engine/userguide/networking/。我在尝试访问 rest 端点时遇到了同样的问题,我认为这将通过本地主机解决,因为它在容器内的 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 进行通信

    【讨论】:

    【解决方案2】:

    当您的应用程序访问 localhost 正在访问容器网络的 localhost 时,对于您的环境的 localhost 尝试在您的运行命令中添加 --network host,如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多