在Elastic Beanstalk中暴露Docker的多个端口

从阅读AWS文档看来,当使用Docker作为Elastic Beanstalk(EB)上的平台(而不是Tomcat等)时,只能显示单个端口。 我试图理解为什么亚马逊创造了这个限制 – 似乎你现在甚至不能同时服务于HTTP和HTTPS。

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

您可以为Elastic Beanstalk的LoadBalancer / ReversProxy编写一个启动configuration文件,以将其他端口转发到其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" } ] } } } 

参考:

以目前的forms来看,Elastic Beanstalk中的Docker支持最多也是微不足道的。 FWIW我写了一篇评论 EB 的博客文章 ,谈到了这一点。 我发现除了你对端口的观察之外,不可能运行多个容器,甚至不能自定义docker run命令。 希望他们能够在未来的更新中扩展支持。

即使没有文档解释它,单容器docker环境确实支持映射多个端口

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

通过以上configuration,docker的8080端口将映射到主机80端口,docker的8090端口映射到主机的9000端口。

为了更清楚,总是列表中的第一个端口将被映射到主机80的后面,其余的将被映射到指定的hostPort(或)与没有主机端口的容器端口相同。