我正在构建一个在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条目,但我怎么能改变它?
答案 0 :(得分:7)
您是否在localhost上的docker容器中托管第三方api?如果是,那么您需要确保第三方api docker容器共享同一网络。见https://docs.docker.com/engine/userguide/networking/。我有同样的问题试图访问休息端点,我假设将与本地主机解决,因为它在我的容器内的docker上运行。以下是帮助我解决问题的一系列步骤:
docker network ls
以查看您拥有的桥接驱动程序数量。在我的情况下,我有2个和容器使用不同的docker run -d -t --network networkname --name containername
docker network inspect networkname
。您将通过容器列表查看网络的详细信息。每个容器都将具有与之关联的IPv4Address。使用这些地址的值来代替localhost或127.0.0.1 答案 1 :(得分:-1)
当您的应用访问 localhost 正在访问容器网络的 localhost 时,对于您环境的 localhost,请尝试在运行命令中添加 --network host
,如下所示:
-sudo docker run --network host -it --rm -p 3000:6001 --name xxx-running xxx