在 docker-compose 中通过 tcp 与 Nest.js 微服务交谈

ser*_*nlp 4 tcp docker microservices docker-compose nestjs

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

预期行为:

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

我得到了什么:

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

我认为问题可能是:

该应用程序似乎在 docker 内部工作,但端口没有正确通过。

我已经尝试过的:

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

ser*_*nlp 7

正如这个问题这个评论)所解释的

如果没有指定主机,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
  }
});
Run Code Online (Sandbox Code Playgroud)