我正在尝试使用 docker 和 Nestjs 设置微服务集群,但每次我尝试调用微服务时,它都会返回连接被拒绝。
version: "3.8"
services:
api:
build:
dockerfile: Dockerfile
context: .
depends_on:
- postgres
- microservice
ports:
- "8080:3000"
environment:
DATABASE_URL: postgres://user:password@postgres:5432/db
NODE_ENV: development
PORT: 3000
networks:
- local
postgres:
image: postgres:10.4
ports:
- "35000:5432"
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db
networks:
- local
microservice:
build:
dockerfile: Dockerfile
context: ../microservice
depends_on:
- postgres
ports:
- "8877:9000"
environment:
DATABASE_URL: postgres://user:password@postgres:5432/db
NODE_ENV: development
networks:
- local
networks:
local:
driver: bridge
在我的主应用程序代码中,我通过以下代码连接到微服务:
constructor() {
this.client = ClientProxyFactory.create({
transport: Transport.TCP,
options: {
host: '127.0.0.1',
port: 8877
}
})
}
在微服务中,我使用以下代码进行设置:
const microserviceOptions = {
transport: Transport.TCP,
options: {
host: '127.0.0.1',
port: 8877
}
}
async function bootstrap() {
const app = await NestFactory.createMicroservice(AppModule, microserviceOptions);
app.listen(() => {
logger.log('Microservice is listening ...');
});
}
bootstrap();
但是,当我执行请求时,我的主容器返回以下错误:
[Nest] 19 - 03/24/2021, 8:00:36 AM [ExceptionsHandler] connect ECONNREFUSED 127.0.0.1:8877 +329786ms
api_1 | Error: connect ECONNREFUSED 127.0.0.1:8877
api_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16)
答案 0 :(得分:0)
我注意到两个潜在的问题:
如果您的主应用程序在微服务的同一网络内的容器中运行,请尝试将主机设置为:microservice
(docker compose 文件中的服务名称)而不是 { {1}} 和微服务内部 ip 的端口,在您的情况下:127.0.0.1
您告诉微服务监听 8877 端口,我猜您需要按照 docker compose 文件的建议监听 9000。