ECONNREFUSED NodeJS 与 docker 容器内的 Express

问题描述 投票:0回答:2

我正在构建一个在 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

由于app会调用第三方api,所以需要request模块。 每次调用请求时,我都会收到以下错误...

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

我知道也许是因为本地主机条目,但我该如何更改它?

node.js docker request
2个回答
32
投票

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

  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 进行通信。

-1
投票

当您的应用程序访问本地主机正在访问容器网络的本地主机时,对于您环境的本地主机,请尝试在运行命令中添加

--network host
,如下所示:

-sudo docker run --network host -it --rm -p 3000:6001 --name xxx-running xxx
© www.soinside.com 2019 - 2024. All rights reserved.