【问题标题】:Nestjs Docker returns connection refused when accessing microserviceNestjs Docker在访问微服务时返回连接被拒绝
【发布时间】:2021-06-20 22:44:47
【问题描述】:

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

【问题讨论】:

    标签: docker microservices nestjs


    【解决方案1】:

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

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

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

    【讨论】:

    • nest js怎么知道微服务是有效的主机名? docker 会自动处理这个吗?我更改了它,现在它给了我以下错误远程服务中没有定义匹配的消息处理程序。 +4624ms
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2018-06-12
    • 2021-07-31
    • 2016-11-28
    • 2018-09-23
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多