我想使用ECS的一个EC2实例连续部署我的nodejs webapp。我无法为此应用创建多个实例。
我目前的持续整合过程: Travis从github构建代码,构建标记和推送docker镜像,并通过ECS Deploy shell script部署到ECS。
每次部署发生时,都会发生以下错误。因为端口80总是由我的webapp使用。
The closest matching container-instance ffa4ec4ccae9
is already using a port required by your task
答案 0 :(得分:2)
以下是使用绿色/蓝色部署模式的方法:
这也允许您回滚到“上次已知的好”状态。
有关详细信息,请参阅http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html。
答案 1 :(得分:2)
主要问题是端口冲突,在群集中的同一节点上部署第二个任务实例时会发生这种情况。除此之外,没有任何东西可以阻止您拥有多个容器实例(例如,当不使用负载均衡器时;完全绑定到任何端口)。
要解决此问题,最新更新中的亚马逊introduced 动态端口功能:
动态端口使您可以更轻松地在群集中启动任务,而无需担心端口冲突。以前,要使用Elastic Load Balancing将流量路由到应用程序,必须在ECS任务中定义固定主机端口。这增加了操作复杂性,因为您必须跟踪每个应用程序使用的端口,并且它降低了集群效率,因为每个实例只能放置一个任务。现在,您可以在ECS任务定义中指定动态端口,该端口在EC2实例上调度时为容器提供未使用的端口。 ECS调度程序使用此端口自动将任务添加到应用程序负载平衡器的目标组。要开始,您可以从EC2控制台或使用AWS命令行界面(CLI)创建应用程序负载平衡器。在ECS控制台中创建一个任务定义,其容器将主机端口设置为0.此容器在计划时自动接收临时端口范围内的端口。