在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(或)与没有主机端口的容器端口相同。
- “nginx-proxy”docker image socket volume not mounted
- Elastic Beanstalk泊坞窗错误
- 如果我移动Elastic Beanstalk应用程序以使用Docker,是否需要自己的服务器?
- 在AWS EBS microservice docker环境中使用Kafka,以避免丢失用户请求并处理更多并发点击
- 在工作层Elastic Beanstalk泊坞窗容器上缺less供应商目录
- 在Elastic Beanstalk / Docker Nginx / PHP-FPM实例中访问客户端IP
- dockerbuild设失败 – “无法分配内存”
- debuggingElastic Beanstalk Docker运行失败?
- 在AWS上监控和扩展基于Docker的Celery工作者群集