我想部署微服务的多个实例,这些实例使用某些端口,但使其具有可伸缩性,而不是在任务定义/ Dockerfile中修复该端口。我的微服务可以侦听环境变量或命令行中提供的端口。
目前,所有微服务都在AWS ECS任务定义中进行了描述,并具有静态端口分配。 每个微服务都向Eureka服务器注册,现在我只能在不同的EC2实例上运行多个服务实例。
我希望能够在同一个EC2实例上运行多个容器,但是每个新的服务实例都应该有一些可用的端口来监听它。
实现此目标的标准方法是什么?
答案 0 :(得分:0)
只需在任务定义中将主机端口设置为0:
如果在具有EC2启动类型的任务中使用容器,则可以 为您的容器端口映射指定一个非保留的主机端口(此 称为静态主机端口映射),也可以省略 hostPort(或将其设置为0),同时指定容器端口和 容器自动接收一个端口(这称为 您的临时端口范围内的动态主机端口映射) 容器实例操作系统和Docker版本。
默认临时端口范围是49153–65535,此范围是 用于1.6.0之前的Docker版本。对于Docker版本1.6.0和 稍后,Docker守护程序尝试从以下目录读取临时端口范围 / proc / sys / net / ipv4 / ip_local_port_range(在计算机上为32768–61000 最新的Amazon ECS优化的AMI)
因此,在这种情况下,您将需要应用程序LB在动态端口上路由流量。
您可以从本文dynamic-port-mapping-in-ecs-with-application-load-balancer那里寻求帮助。