【问题标题】:AWS EC2 Container Service / Elastic Beanstalk Docker Container Port udp bindingAWS EC2 容器服务/Elastic Beanstalk Docker 容器端口 udp 绑定
【发布时间】:2015-08-22 11:00:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: amazon-web-services docker amazon-elastic-beanstalk amazon-ecs


    【解决方案1】:

    Amazon EC2 Container Service 的 GA 版本仍然缺少 UDP 支持,请参阅 Amazon ECS Container AgentPorts 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 中。

      【讨论】:

        猜你喜欢
        • 2015-05-01
        • 2020-07-23
        • 2017-07-26
        • 2016-11-28
        • 2015-03-13
        • 2021-11-25
        • 2018-12-12
        • 2014-11-08
        • 2012-02-02
        相关资源
        最近更新 更多