AWS EC2容器服务/ Elastic Beanstalk Docker容器端口udp绑定

根据ECS任务定义的文档,这是我们如何定义端口映射。

"portMappings": [ { "containerPort": integer, "hostPort": integer } ... ] 

默认情况下,这是通过tcp绑定端口。 如何实现udp端口绑定到在AWS Elastic Beanstalk(多容器)或AWS ECS中运行的Docker容器?

对于Amazon EC2容器服务的GA版本,仍缺lessUDP支持,请参阅端口假定为 Amazon ECS容器代理的 TCP(问题#2) 。 幸运的是,这个惊人的差距已经得到解决,新的ECS代理版本正在等待发布 – 我预计这个版本很快就会发生, AWS Elastic Beanstalk团队通常会在适当的时候快速更新其官方图像(注意Elastic Beanstalk论坛的通知)。

根据https://github.com/aws/amazon-ecs-agent/issues/2 ,现在应该支持:

 "portMappings": [ { "containerPort": integer, "hostPort": integer, "protocol": "udp", } ... ] 

@ jrc的答案是正确的。 我已经在Elastic Beanstalk多容器Docker环境(它与使用nginx作为容器端口的反向代理的单容器Docker环境相反)上使用Raintank的Graphite堆栈镜像raintank/graphite-stack ,支持多端口和UDP,是ECS的前端)。 相应的Dockerrun.aws.json如下所示:

 { "AWSEBDockerrunVersion": 2, "containerDefinitions": [ { "name": "stack", "image": "raintank/graphite-stack", "essential": true, "memory": 850, "portMappings": [ { "containerPort": 3000, "hostPort": 80 }, { "containerPort": 8125, "hostPort": 8125, "protocol": "udp" } ] } ] } 

然后login到相应的EC2实例,然后键入sudo docker ps

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12a5711dab47 raintank/graphite-stack "/usr/bin/supervisord" 2 minutes ago Up 2 minutes 443/tcp, 2003/tcp, 8125/tcp, 0.0.0.0:8125->8125/udp, 0.0.0.0:80->3000/tcp ecs-awseb-test-abc-1-stack-abc 930a9b814df4 amazon/amazon-ecs-agent:latest "/agent" 3 minutes ago Up 3 minutes ecs-agent 

手动发送statsd UDP数据包, echo "test.statsd:1|c" | nc -w 1 -u test.aws-region.elasticbeanstalk.com 8125 echo "test.statsd:1|c" | nc -w 1 -u test.aws-region.elasticbeanstalk.com 8125 ,我看到它出现在Graphite中。