【问题标题】:Deploy NodeJS Express API to AWS将 NodeJS Express API 部署到 AWS
【发布时间】:2018-12-02 20:10:42
【问题描述】:

我使用 CodeFresh 构建我的 Docker 映像并推送到 AWS ECR。

我检查了我的 ECR,我可以看到推送成功。

我通过 SSH 连接到我的 EC2,在那里看不到任何内容。


更新

[ec2-user@ip-10-0-0-47 share]$ docker ps                                                                                                                            
CONTAINER ID        IMAGE                                                    COMMAND             CREATED             STATUS              PORTS               NAMES  
1e4d4eae6520        616934057156.dkr.ecr.us-east-2.amazonaws.com/bheng-api   "sh cmd.sh"         29 hours ago        Up 29 hours         3002/tcp            ecs-api-1-bheng-api-88ef95c7ddc993badf01                                                                                                                                   
44b78781d487        amazon/amazon-ecs-agent:latest                           "/agent"            30 hours ago        Up 30 hours                             ecs-agent                                                                                                                                                                  
[ec2-user@ip-10-0-0-47 share]$                                                                                                                                      
[ec2-user@ip-10-0-0-47 share]$                                                                                                                                      
[ec2-user@ip-10-0-0-47 share]$ docker images                                                                                                                        
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE                                           
616934057156.dkr.ecr.us-east-2.amazonaws.com/bheng-api   latest              41e9eaa2aff2        29 hours ago        952MB                                          
amazon/amazon-ecs-agent                                  latest              622111e45fde        6 weeks ago         29.4MB                                         
amazon/amazon-ecs-pause                                  0.1.0               b875fd8f097a        6 weeks ago         963kB                                          
[ec2-user@ip-10-0-0-47 share]$                                                                                                                                      
[ec2-user@ip-10-0-0-47 share]$                                                                                                                                      
[ec2-user@ip-10-0-0-47 share]$

这是我的EC2

的安全组

PM2

Use --update-env to update environment variables
[PM2] Applying action restartProcessId on app [all](ids: 0)
[PM2] [index](0) ✓
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem       │ user │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ index    │ 0  │ fork │ 23901 │ online │ 1       │ 0s     │ 0%  │ 12.8 MB   │ node │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘

【问题讨论】:

  • 也许我遗漏了一些东西,但您为什么希望内容在 /home 中?
  • 我不知道如何调试整个事情。在 codefresh 构建上显示成功,而 ECR 方面也显示成功。唯一剩下的是我的任务定义和我的 EC2,我不知道从哪里开始调试 :( - 有什么建议吗?
  • 好吧,任务定义是 ECS 的 AFAIK,因此它会创建一个包含您定义的图像的容器。你试过运行docker ps吗?如果任务正在运行,您应该会看到一个正在运行的 docker 映像。
  • @vstm :很好的提示,我运行docker ps,我看到了那里的过程。我还运行docker images,我看到列出的图像。
  • 检查你的安全组是否允许端口 80 来自任何地方,因为你的容器从过去 29 小时开始运行

标签: node.js amazon-web-services docker amazon-ec2 continuous-integration


【解决方案1】:

第一件事

ls 并不意味着它会显示 docker 图像。

如果 docker 镜像拉取成功,则使用以下命令进行检查。

docker images

这将打印在此 ec2 容器实例中运行的所有图像。 类似56789.dkr.ecr.us-east-2.amazonaws.com/bheng-api:latest

至于调试是一个问题,您需要检查您的 docker 容器是否正在运行。

docker ps

这将打印正在运行的容器。

复制容器的 id 并运行此命令。

docker exec -it {container_id} bash|ash

码头工人日志

docker logs  {container_id}

您还可以通过将角色分配给您的 ece 容器实例并运行以下命令来检查图像的工作方式。

docker run -it --rm -p 80:80 56789.dkr.ecr.us-east-2.amazonaws.com/bheng-api:latest

我再提一下步骤

  1. 创建 ECR 并推送你的 docker 镜像
  2. 创建任务定义
  3. 创建运行该任务定义实例的服务。如果没有服务,就不会有容器或 docker 镜像之类的东西。 一旦你创建了服务,你就会在你的 ec2 实例中看到 docker 镜像。

您还可以在 ECS -> 集群 -> 服务 -> 任务下使用 AWS 控制台查看任务事件

如果出现问题,您会在类似的事件中看到

如果一切正常,那么

完整图片

【讨论】:

  • -bash: ash: command not found 我为你的命令试了一个。
  • 如果图像是 alpine 你需要使用 ash 或者如果其他则使用 bash
  • 得到了。它。顺便说一句,惊人的答案。我相信你的回答会帮助很多像我这样的人。
  • 我的任务,说不活跃。 :( 我正在努力确保我的 API 是可访问的。
  • 任务不活动意味着没有任何服务运行或检查你的安全组是否允许端口
猜你喜欢
  • 2017-05-06
  • 1970-01-01
  • 2015-01-24
  • 2018-09-14
  • 1970-01-01
  • 2016-12-20
  • 2018-01-11
  • 2021-10-15
  • 2015-02-03
相关资源
最近更新 更多