我有两个NodeJS服务的容器和一个Nginx的反向代理容器。
我在端口80上设置了NINNX,因此可以通过我的浏览器上的localhost公开访问
我还使用反向代理将proxy_pass传递给每个负责的服务。
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。
请帮忙。
答案 0 :(得分:0)
尝试在depends_on
的docker-compose文件中添加nginx
,如下所示:
version: '3'
services:
service1:
build: './service1'
expose:
- "3000"
networks:
- backend
service2:
build: './service2'
expose:
- "3000"
networks:
- backend
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- backend
depends_on:
- service1
- service2
networks:
backend:
driver: bridge
这将确保在nginx容器尝试连接到它们之前先运行这两个服务。也许连接被拒绝是因为Nginx容器由于执行conf文件并连接到后端时没有找到两个正在运行的服务而不断崩溃。
答案 1 :(得分:-2)
我相信您还需要在每个服务上公开端口3000。如下所示:
version: '3'
services:
service1:
build: './service1'
expose:
- "3000"
networks:
- backend
service2:
build: './service2'
expose:
- "3000"
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