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中。
- 如何设置AWS ECS + dockerfile-maven-plugin?
- AWS ECS和Docker:不能通过tcp:// <MY-ID> .dkr.ecr.us-east-1.amazonaws.com:2375 / <PROJECT>连接到Docker守护进程。
- 将应用程序从一个AMI无缝切换到另一个AMI
- ECS +动物园pipe理员 – 动物园pipe理员必须被docker化
- AWS ECS中调度程序作业的体系结构
- 用EBS部署多容器docker环境(flask&nginx)
- 用ecs部署laravel网站后如何保持用户会话
- Docker:用于开发和生产环境的不同的ENVvariables
- 我应该如何将敏感环境variables传递给Amazon ECS任务?