【发布时间】:2018-12-25 06:56:14
【问题描述】:
我有两个 NodeJS 服务的容器和一个用于反向代理的 Nginx。
我已经在端口 80 上创建了 NGINX,因此它可以通过我的浏览器上的 localhost 公开访问
我还使用反向代理将代理传递给每个负责的服务。
location /api/v1/service1/ {
proxy_pass http://service1:3000/;
}
location /api/v1/service2/ {
proxy_pass http://service2:3000/;
}
在我的服务1中,有一个axios模块想通过向localhost/api/v1/service2发出请求来调用服务2
但是,它说连接被拒绝。我怀疑服务 1 中的 localhost 是否指的是它的容器,而不是 docker 主机。
version: '3'
services:
service1:
build: './service1'
networks:
- backend
service2:
build: './service2'
networks:
- backend
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- backend
networks:
backend:
driver: bridge
即使使用网络后,它仍然显示 ECONNREFUSED。
请帮忙。
【问题讨论】:
-
如您所见,server1 容器的
localhost是 server1 容器。您可能需要使该主机名可配置。 -
@DavidMaze 知道怎么做吗?那么,我应该只使用 servicename 吗?我正在尝试连接到 localhost,所以当我更改我的 API 服务时,它会自动更改,而无需将所有 servicename 重命名为 servicename_new
-
您没有尝试连接到
localhost(“此容器”),您正在尝试连接到在其他地方运行的服务。如果您的源代码中有硬编码的主机名,您需要使其可配置,很可能通过从环境变量中获取其值。 -
@DavidMaze 你最好发布一个答案,这样我才能接受。
标签: node.js docker networking docker-compose