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

thi*_*ski 35 docker amazon-elastic-beanstalk

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

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

Pra*_*abu 20

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

{
    "AWSEBDockerrunVersion": "1",
    "Ports": [
        {
            "ContainerPort": "8080"
        },
        {
            "HostPort": "9000",
            "ContainerPort": "8090"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这是正确的答案!标记为"正确"的答案仅涉及提供必要的基础结构更改(安全组规则,侦听器)以确保任何其他端口的可访问性. (3认同)

Nas*_*ibi 4

您可以为 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"
      } ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 此示例在负载均衡器上打开端口 80,并代理到实例上的端口 8080。它不公开多个实例端口。即使这样做,将请求转发到 docker 的实例上的反向代理也无法侦听多个端口。 (2认同)
  • 但它不仅仅是负载均衡器。对于 docker,beanstalk 还在实例上设置本地代理,将流量转发到 docker 容器。您是否已在 beanstalk 上成功配置了具有多个端口的 docker 容器? (2认同)
  • 我觉得这个例子不是特别清楚。最好能说明OP要求的内容,即展示如何在该配置文件中设置443和80。因此,这个答案的票数低,但问题的票数高。 (2认同)