从阅读AWS文档时,看来当使用Docker作为Elastic Beanstalk(EB)上的平台(而不是Tomcat等)时,只能暴露一个端口。我试图理解为什么亚马逊创建了这个限制 - 似乎你现在甚至无法同时提供HTTP和HTTPS。
我希望使用Docker作为容器,因为它允许我在同一容器中运行多个互连的服务器进程,其中一些需要多个端口(例如RTSP)。这种应用程序是否有任何变通方法,例如RTSP和HTTP服务器都可以在EB上的同一个Docker容器中运行?
答案 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"
} ]
}
}
}
价: