我正在构建一个在 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 }
我知道也许是因为本地主机条目,但我该如何更改它?
您是否将第三方 API 托管在本地主机上的 docker 容器内?如果是,那么您需要确保第三方 API docker 容器共享同一网络。请参阅https://docs.docker.com/engine/userguide/networking/。我在尝试访问休息端点时遇到了同样的问题,我认为该问题可以通过 localhost 解决,因为它在我的 Docker 容器内运行。以下是帮助我解决问题的一系列步骤:
docker network ls
查看您有多少个桥接驱动程序。就我而言,我有 2 个,并且容器使用不同的容器。docker run -d -t --network networkname --name containername
docker network inspect networkname
。您将看到网络的详细信息以及容器列表。每个容器都有一个与其关联的 IPv4 地址。使用这些地址的值而不是 localhost 或 127.0.0.1 进行通信。当您的应用程序访问本地主机正在访问容器网络的本地主机时,对于您环境的本地主机,请尝试在运行命令中添加
--network host
,如下所示:
-sudo docker run --network host -it --rm -p 3000:6001 --name xxx-running xxx