AWS EC2 容器服务/Elastic Beanstalk Docker 容器端口 udp 绑定
Posted
技术标签:
【中文标题】AWS EC2 容器服务/Elastic Beanstalk Docker 容器端口 udp 绑定【英文标题】:AWS EC2 Container Service / Elastic Beanstalk Docker Container Port udp binding 【发布时间】:2015-08-22 11:00:57 【问题描述】:根据ECS任务定义的文档,这就是我们定义端口映射的方式。
"portMappings": [
"containerPort": integer,
"hostPort": integer
...
]
默认情况下,这是通过tcp
绑定端口。如何实现udp
端口绑定到在 AWS Elastic Beanstalk(多容器)或 AWS ECS 中运行的 docker 容器?
【问题讨论】:
【参考方案1】:Amazon EC2 Container Service 的 GA 版本仍然缺少 UDP 支持,请参阅 Amazon ECS Container Agent 的 Ports are assumed to be TCP (issue #2)。幸运的是,这个令人惊讶的差距已经得到解决,新的 ECS 代理版本待发布 - 我希望这个版本很快就会发布,AWS Elastic Beanstalk 团队通常会很快更新他们的官方镜像当然(请关注Elastic Beanstalk forum 以获取相应的公告)。
【讨论】:
我相信 Elastic Beanstalk 仍然不支持此功能。任何人都可以另外确认吗?很遗憾他们花了这么长时间。与上述声称他们“快”6 个月的说法相反,按照我的标准,这肯定不算快。【参考方案2】:根据https://github.com/aws/amazon-ecs-agent/issues/2,现在应该支持:
"portMappings": [
"containerPort": integer,
"hostPort": integer,
"protocol": "udp",
...
]
【讨论】:
【参考方案3】:@jrc 的回答是正确的。我已经在 Elastic Beanstalk 多容器 Docker 环境中使用 Raintank 的 Graphite 堆栈映像 raintank/graphite-stack
对其进行了测试(这与使用 nginx 作为容器的反向代理的单容器 Docker 环境相反端口并且不支持多端口和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"
]
]
然后登录到相应的 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
,我看到它出现在 Graphite 中。
【讨论】:
以上是关于AWS EC2 容器服务/Elastic Beanstalk Docker 容器端口 udp 绑定的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS Elastic Beanstalk / EC2 时如何查看服务器日志?我需要使用 SSH 吗?
AWS Elastic Beanstalk 使用 Django 在部署的 EC2 服务器上托管 PostgreSQL
Elastic Beanstalk:EC2 服务器上的应用程序目录/脚本位置
在一个 AWS EC2 实例上运行多个环境 (Elastic Beanstalk)