问题:在 docker-compose 中通过 tcp 与 Nest.js 微服务通信

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

预期行为:

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

我得到了什么:

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

我认为问题可能是:

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

我已经尝试过的:

  • 制作混合应用。发出一个 GET 请求,然后在内部传递给 TCP 微服务(这有效,但不是我想要的行为)。

  • 在 docker 容器内运行yarn start:dev而不是yarn start:prod。这没有做任何事情,但是再次使用相同的端口。

  • 像这样暴露端口:(这什么也没做)

- target: 3000
  published: 3000
  protocol: tcp
  mode: host

解答

正如这个问题(这个评论)解释

如果没有指定主机,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
  }
});
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐