无法容器化 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,微服务容器化开发实战