我无法将IP:port
绑定到AWS ECS
任务定义中的容器端口。这样在命令行上,
docker run "-p 172.17.42.1:14242:3000"
172.17.42.1:14242
是IP:port
。但是在AWS ECS
中,只有两个选项,hostPort
和containerPort
,它们只采用整数而不是字符串:
"portMappings": [
{
"hostPort": 14242,
"containerPort": 3000
}
]
那么,如何在任务定义中提供IP:port
?
当我做(没有IP)port:port
映射时,在创建任务后我做:
aws ecs describe-tasks
显示
0.0.0.0:14242:3000。
但我希望特定IP不是0.0.0.0
。
答案 0 :(得分:1)
据我所知,这不是一个受支持的功能,因为主机实例的IP地址未提前知道,所以在ECS上没有太大意义。
ECS旨在使用“群集”中的所有可用EC2实例来部署属于服务/任务的容器。 ECS的核心功能之一是以临时方式灵活地在集群中添加/删除/更新EC2实例,并允许在启动任务的特定时间将容器部署到任何具有可用资源的集群实例上。这意味着您无法保证在创建任务定义时提前知道IP地址,因为您无法确定将部署哪个EC2实例。
如果确实具有强大的用例,您必须在特定的EC2实例和IP上部署任务/容器,那么您可以通过直接与ECS代理交互来推出自己的解决方案。 [1] [2]
那就是说,我强烈建议重新检查你的设计并尝试以与host / ip无关的方式实现它。例如,您可以在ECS“服务”定义[3]中使用Elastic Load Balancer(ELB),以允许通过固定的DNS主机名访问容器,而不管它们托管在哪个IP上。
[1] http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_agent.html
[2] https://github.com/aws/amazon-ecs-agent
[3] http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html