4

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

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

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

4

3 回答 3

2

Amazon EC2 Container Service的 GA 版本仍然缺少 UDP 支持,请参阅端口假定为 Amazon ECS 容器代理的 TCP(问题 # 2 。幸运的是,这个令人惊讶的差距已经得到解决,新的 ECS 代理版本正在等待发布——我希望这个版本很快就会发布,AWS Elastic Beanstalk团队通常会在适当的时候快速更新他们的官方镜像(请关注用于发布公告的Elastic Beanstalk 论坛)。

于 2015-06-08T07:28:53.627 回答
2

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

"portMappings": [
    {
        "containerPort": integer,
        "hostPort": integer,
        "protocol": "udp",
    }
    ...
]
于 2016-11-26T22:54:32.520 回答
1

@jrc 的回答是正确的。raintank/graphite-stack我已经在 Elastic Beanstalk 多容器 Docker 环境中使用 Raintank 的 Graphite 堆栈映像对其进行了测试(这与使用nginx作为容器端口的反向代理并且不支持多端口和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 中。

于 2017-11-07T09:54:44.410 回答