在Elastic Beanstalk中公开Docker的多个端口

时间:2014-09-14 01:30:57

标签: docker elastic-beanstalk

从阅读AWS文档时,看来当使用Docker作为Elastic Beanstalk(EB)上的平台(而不是Tomcat等)时,只能暴露一个端口。我试图理解为什么亚马逊创建了这个限制 - 似乎你现在甚至无法同时提供HTTP和HTTPS。

我希望使用Docker作为容器,因为它允许我在同一容器中运行多个互连的服务器进程,其中一些需要多个端口(例如RTSP)。这种应用程序是否有任何变通方法,例如RTSP和HTTP服务器都可以在EB上的同一个Docker容器中运行?

3 个答案:

答案 0 :(得分:15)

即使没有文档解释它,单容器Docker Environment也支持映射多个端口

{
    "AWSEBDockerrunVersion": "1",
    "Ports": [
        {
            "ContainerPort": "8080"
        },
        {
            "HostPort": "9000",
            "ContainerPort": "8090"
        }
    ]
}

通过上述配置,docker的端口8080将映射到主机端口80,docker的端口8090将映射到主机端口9000.

更清楚的是,列表中的第一个端口将被映射到主机端口80,并且在没有主机端口的情况下,剩余部分将被映射到指定的hostPort(或)与容器端口相同。

答案 1 :(得分:4)

目前的形式,Elastic Beanstalk中的Docker支持最多只是边缘。 FWIW我写了a blog post评估涉及此问题的EB。我发现除了你对端口的观察之外,它不可能运行多个容器,甚至不能自定义docker run命令。希望他们在未来的更新中扩展支持。

答案 2 :(得分:3)

您可以为Elastic Beanstalk的LoadBalancer / ReversProxy编写一个启动配置文件,以将其他端口转发到其EC2实例。来自Ben Delarre的示例:

"Resources" : {
  "AWSEBLoadBalancerSecurityGroup": {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
      "GroupDescription" : "Enable 80 inbound and 8080 outbound",
      "VpcId": "vpc-un1que1d",
      "SecurityGroupIngress" : [ {
        "IpProtocol" : "tcp",
        "FromPort" : "80",
        "ToPort" : "80",
        "CidrIp" : "0.0.0.0/0"
      }],
      "SecurityGroupEgress": [ {
        "IpProtocol" : "tcp",
        "FromPort" : "8080",
        "ToPort" : "8080",
        "CidrIp" : "0.0.0.0/0"
      } ]
    }
  },
  "AWSEBLoadBalancer" : {
    "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
    "Properties" : {
      "Subnets": ["subnet-un1que1d2"],
      "Listeners" : [ {
        "LoadBalancerPort" : "80",
        "InstancePort" : "8080",
        "Protocol" : "HTTP"
      } ]
    }
  }
}

价: