带有快速内部docker容器的ECONNREFUSED nodeJS

时间:2016-05-06 03:40:43

标签: node.js docker request

我正在构建一个在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条目,但我怎么能改变它?

2 个答案:

答案 0 :(得分:7)

您是否在localhost上的docker容器中托管第三方api?如果是,那么您需要确保第三方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. 相互通信
  4. 运行docker network inspect networkname。您将通过容器列表查看网络的详细信息。每个容器都将具有与之关联的IPv4Address。使用这些地址的值来代替localhost或127.0.0.1
  5. 进行通信

答案 1 :(得分:-1)

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

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