无法容器化 NestJS 微服务

Posted

技术标签:

【中文标题】无法容器化 NestJS 微服务【英文标题】:Unable to containerize a NestJS microservice 【发布时间】:2021-12-10 19:04:30 【问题描述】:

我正在尝试将 NestJS 微服务容器化。当我直接运行服务时,它按预期运行。但是当我构建一个图像然后运行它时,我得到了这个错误:

9:09:10 AM - Starting compilation in watch mode...

9:09:17 AM - Found 0 errors. Watching for file changes.
/var/www/notification-service/node_modules/twilio/lib/rest/Twilio.js:139
    throw new Error('username is required');
    ^
Error: username is required
    at new Twilio (/var/www/notification-service/node_modules/twilio/lib/rest/Twilio.js:139:11)
    at Object.initializer [as default] (/var/www/notification-service/node_modules/twilio/lib/index.js:10:10)
    at Object.createTwilioClient (/var/www/notification-service/node_modules/nestjs-twilio/dist/common/twilio.utils.js:25:34)
    at Object.createTwilioProviders (/var/www/notification-service/node_modules/nestjs-twilio/dist/providers/twilio.provider.js:8:28)
    at Function.forRoot (/var/www/notification-service/node_modules/nestjs-twilio/dist/twilio-core.module.js:25:38)
    at Function.forRoot (/var/www/notification-service/node_modules/nestjs-twilio/dist/twilio.module.js:17:61)
    at Object.<anonymous> (/var/www/notification-service/dist/app.module.js:40:42)
    at Module._compile (internal/modules/cjs/loader.js:1251:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1272:10)
    at Module.load (internal/modules/cjs/loader.js:1100:32)

当我在没有容器化的情况下运行它时。它似乎开始正常:

2:40:20 pm - Starting compilation in watch mode...

2:40:24 pm - Found 0 errors. Watching for file changes.

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [NestFactory] Starting Nest application...

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] MailerModule dependencies initialized +78ms

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] TwilioModule dependencies initialized +1ms

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] TwilioCoreModule dependencies initialized +0ms

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] MailerCoreModule dependencies initialized +0ms

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] ConfigHostModule dependencies initialized +1ms

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] AppModule dependencies initialized +0ms

[Nest] 15992   - 25/10/2021, 2:40:25 pm   [InstanceLoader] ConfigModule dependencies initialized +0ms

Executing (default): SELECT 1+1 AS result

[Nest] 15992   - 25/10/2021, 2:40:26 pm   [InstanceLoader] DatabaseModule dependencies initialized +123ms

[Nest] 15992   - 25/10/2021, 2:40:26 pm   [NestMicroservice] Nest microservice successfully started +5ms

【问题讨论】:

仅考虑错误消息几乎不可能调试某些东西。您能否编辑问题以包含minimal reproducible example? 您是否设置了任何环境变量或有 twilio 的配置文件? 【参考方案1】:

这里是 Twilio 开发者宣传员。

您遇到的错误是因为您没有为 Twilio 库提供用户名(帐户 SID 或 API 密钥)。 Twilio 通常建议您在环境变量中设置您的帐户凭据,以便它们不是源代码的一部分。我没有容器化应用程序的经验,但我的猜测是,当您构建和运行容器时,它不再使用相同的可用环境变量运行。

因此,您需要找到一种方法将帐户凭据安全地放入您的容器中,以便您的应用程序可以读取它们。从您提供的错误/运行日志中,我对您的应用程序了解不多,但希望这能让您走上正轨。

【讨论】:

谢谢@philnash。出现问题是因为我没有使用容器内的键调用环境变量。 很高兴你把它整理好了!

以上是关于无法容器化 NestJS 微服务的主要内容,如果未能解决你的问题,请参考以下文章

容器化微服务

微服务化之无状态化与容器化

基于Docker+Kubernetes,微服务容器化开发实战

微服务化之无状态化与容器化

Github限时开放!阿里内部强推微服务容器化参考指南我粉了

云原生 (Cloud Native) = 微服务 + DevOps + 持续交付 + 容器化 ?