访问微服务时,Nestjs Docker 返回连接被拒绝

时间:2021-03-24 08:36:06

标签: docker microservices nestjs

我正在尝试使用 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)

1 个答案:

答案 0 :(得分:0)

我注意到两个潜在的问题:

  1. 如果您的主应用程序在微服务的同一网络内的容器中运行,请尝试将主机设置为:microservice(docker compose 文件中的服务名称)而不是 { {1}} 和微服务内部 ip 的端口,在您的情况下:127.0.0.1

  2. 您告诉微服务监听 8877 端口,我猜您需要按照 docker compose 文件的建议监听 9000。