【问题标题】:Talking to Nest.js microservice over tcp in docker-compose在 docker-compose 中通过 tcp 与 Nest.js 微服务通信
【发布时间】:2020-03-12 12:43:30
【问题描述】:

代码和更多文档可以在这个repo中找到

预期行为:

在使用和不使用 docker 运行应用程序时收到响应。

我得到了什么:

在没有 docker 但不在 docker 内部运行应用程序时的响应。

我认为问题可能是:

该应用似乎在 docker 内部运行,但端口无法正确通过。

我已经尝试过的:

  • 制作混合应用程序。发出一个 GET 请求,然后在内部传递给 TCP 微服务(这有效,但不是我想要的行为)。
  • 在 docker 容器内运行 yarn start:dev 而不是 yarn start:prod。这没有做任何事情,但是再次使用相同的端口。
  • 像这样暴露端口:(这没有任何作用)
- target: 3000
  published: 3000
  protocol: tcp
  mode: host

【问题讨论】:

    标签: docker tcp docker-compose microservices nestjs


    【解决方案1】:

    正如this issue (this comment) 解释的那样

    如果没有指定主机,NestJS 将绑定到 localhost

    这导致我在 docker 中运行时无法连接该服务。因此,通过将主机设置为0.0.0.0,我能够通过 TCP 进行连接。

    完整示例:

    const app = await NestFactory.createMicroservice(AppModule, {
      transport: Transport.TCP,
      options: {
        host: '0.0.0.0',
        port: 3000
      }
    });
    

    【讨论】:

    • 这实际上适用于客户端主机可解析的任何内容
    【解决方案2】:

    尝试将此添加到您的撰写中:

    myservice:
      expose:
        - "3000"
      ports:
        - "3000:3000"
    

    【讨论】:

      猜你喜欢
      • 2022-07-16
      • 2021-01-24
      • 1970-01-01
      • 2019-07-24
      • 2019-05-19
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      相关资源
      最近更新 更多