AWSのドキュメントを読むと、DockerをElastic Beanstalk(EB)のプラットフォームとして使用する場合(Tomcatなどではなく)、単一のポートしか公開できないようです。 Amazonがこの制限を作成した理由を理解しようとしています-現在、HTTPとHTTPSの両方を提供することさえできないようです。
Dockerをコンテナーとして使用したいのは、Dockerを使用すると、同じコンテナー内で相互接続された複数のサーバープロセスを実行できるため、そのいくつかは複数のポート(RTSPなど)を必要とします。この種のアプリケーションには回避策がありますか?RTSPとHTTPサーバーの両方がEB上の同じDockerコンテナー内で実行されている可能性がありますか?
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"
} ]
}
}
}
参照:
どのドキュメントでも説明されていませんが、単一のコンテナDocker環境は複数のポートのマッピングをサポートしています
{
"AWSEBDockerrunVersion": "1",
"Ports": [
{
"ContainerPort": "8080"
},
{
"HostPort": "9000",
"ContainerPort": "8090"
}
]
}
上記の構成では、Dockerのポート8080はホストマシンのポート80にマッピングされ、Dockerのポート8090はホストマシンのポート9000にマッピングされます。
より明確にするために、リストの最初のポートは常にホストマシンのポート80にマップされ、残りは指定されたhostPort(または)ホストポートがない場合はコンテナポートと同じにマップされます。
現在の形式では、Elastic BeanstalkでのDockerサポートはせいぜいわずかです。 FWIW私が書いた ブログ投稿 これに触れたEBを評価しています。ポートに関する観察に加えて、複数のコンテナを実行することも、docker run
コマンドをカスタマイズすることもできないことがわかりました。うまくいけば、彼らは将来のアップデートでサポートを拡張するでしょう。