我想部署我的微服务的几个实例,它使用某些端口,但使其可伸缩,并且不在任务定义/ Dockerfile中修复该端口。我的微服务可以监听环境变量或命令行中提供的端口。
目前,所有微服务都在AWS ECS任务定义中描述,并具有静态端口分配。每个微服务都向Eureka服务器注册自己,现在我只能在不同的EC2实例上运行多个服务实例。
我希望能够在同一个EC2实例上运行多个容器,但是每个新的服务实例都应该有一些空闲的端口来监听它。
实现这一点的标准方法是什么?
发布于 2019-06-13 22:14:59
只需在任务定义中将主机端口设置为0即可:
如果在EC2启动类型的任务中使用容器,您可以为您的容器端口映射指定一个非预留的主机端口(称为静态主机端口映射),或者您可以在指定容器端口时省略hostPort (或将其设置为0),您的容器将自动接收容器实例操作系统和Docker版本的临时端口范围内的端口(称为动态主机端口映射)。

默认临时端口范围为49153-65535,1.6.0之前的版本使用该范围。对于Docker版本1.6.0和更高版本,Docker守护进程尝试从/proc/sys/net/ipv4/ip_local_ port _range读取临时端口范围(在最新的Amazon ECS优化的AMI上为32768-61000)
因此,在这种情况下,您将需要应用程序LB在动态端口上路由流量。
您可以从这篇文章dynamic-port-mapping-in-ecs-with-application-load-balancer中获得帮助。
https://stackoverflow.com/questions/56582069
复制相似问题