在未登录 cloudwatch 的情况下部署到 Fargate 时,Nestjs 启动器挂起

问题描述 投票:0回答:1

在 Fargate 集群上部署空的 Nestjs 项目时遇到一些问题。 所有其他容器都正常工作并且网络正常。主要问题是,在记录 Nestjs 启动后,NestJS 应用程序只是挂起而不写入任何日志。 应用程序是一个空项目,其中包含 appModule,没有添加其他代码,因此没有连接数据库连接或其他服务。 使用简单的 dockerfile:

`# 基础镜像 来自节点:18-alpine 作为开发者

创建应用程序目录

工作目录/usr/src/app

使用通配符来确保 package.json 和 package-lock.json 都被复制

复制包*.json ./

安装应用程序依赖项

运行 npm 安装

捆绑应用程序源

复制。 .

构建

运行 npm 运行构建

使用生产版本启动服务器

CMD [“节点”,“dist/main.js”]`

现在我唯一的输出是“nest start”,并且容器变得无响应,运行状况检查失败,因此部署。一旦代码到达应用程序的引导程序 (Nestfactory.create(AppModule)),日志记录就会停止,容器就会变得无响应。 Cleary,可以很好地在本地和/或使用 docker-compose 构建和运行容器。 甚至从 ecr 注册表中提取图像(我将这些图像推送到 Fargate 中运行它们)并在本地执行也可以正常工作。

我确实确保诊断它是否与配置/网络/基础设施相关,但其他所有容器都可以工作(简单的 nginx、带有 http 服务器的节点、其他节点应用程序等...) 更重要的是,日志中没有看到有关使用通常的“启动应用程序.... Nestfactory”启动应用程序的日志记录。 我还尝试使用一些强大的任务定义,以防 Nestjs 与内存和 CPU 发生冲突,但应用程序只是挂在那里并稍后终止,因为 ecs 守护进程由于运行状况检查失败和/或由于内存不足而杀死了它。

作为信息,我使用带有arm64 cpu的fargate和构建的图像并将其推送到macbook m1上的私有ecr存储库,因此不存在架构不兼容(如果不兼容,容器根本不会启动),而且还构建x86 Fargate amd64 以同样的方式失败。

可以是一个完整的应用程序,甚至是最小的nestjs项目,导致的失败总是相同的 现在我希望,如果是 docker 容器和/或 Nodejs 版本的一些兼容性问题,某些内容会被写入日志,但应用程序只是挂起并且容器变得无响应,所以我什至无法通过 cli 的executeAction 在容器中检查它。

由于在应用程序启动之前除了控制台日志之外没有其他日志,因此我实际上没有太多信息来诊断问题。

提前致谢

amazon-web-services docker nestjs amazon-ecs aws-fargate
1个回答
0
投票

我们也遇到了同样的问题,我们通过修改Docker解决了这个问题: FROM 节点:20 作为节点 docker

工作目录/应用程序

#安装应用程序依赖项 复制包*.json ./

运行 npm ci #捆绑应用程序代码 复制 。 .

构建应用程序

运行 npm 运行构建

暴露3000 CMD [“节点”,“dist/src/main.js”]

将 dist/main 修改为 dist/src/main.js ...

检查一次您的 Dist 文件夹..

请考虑检查:任何 SSM 或 env 变量问题。

© www.soinside.com 2019 - 2024. All rights reserved.