web-dev-qa-db-ja.com

Elastic Beanstalk内のDockerから複数のポートを公開する

AWSのドキュメントを読むと、DockerをElastic Beanstalk(EB)のプラットフォームとして使用する場合(Tomcatなどではなく)、単一のポートしか公開できないようです。 Amazonがこの制限を作成した理由を理解しようとしています-現在、HTTPとHTTPSの両方を提供することさえできないようです。

Dockerをコンテナーとして使用したいのは、Dockerを使用すると、同じコンテナー内で相互接続された複数のサーバープロセスを実行できるため、そのいくつかは複数のポート(RTSPなど)を必要とします。この種のアプリケーションには回避策がありますか?RTSPとHTTPサーバーの両方がEB上の同じDockerコンテナー内で実行されている可能性がありますか?

35
thinkski

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"
      } ]
    }
  }
}

参照:

3

どのドキュメントでも説明されていませんが、単一のコンテナDocker環境は複数のポートのマッピングをサポートしています

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

上記の構成では、Dockerのポート8080はホストマシンのポート80にマッピングされ、Dockerのポート8090はホストマシンのポート9000にマッピングされます。

より明確にするために、リストの最初のポートは常にホストマシンのポート80にマップされ、残りは指定されたhostPort(または)ホストポートがない場合はコンテナポートと同じにマップされます。

21
Prabu

現在の形式では、Elastic BeanstalkでのDockerサポートはせいぜいわずかです。 FWIW私が書いた ブログ投稿 これに触れたEBを評価しています。ポートに関する観察に加えて、複数のコンテナを実行することも、docker runコマンドをカスタマイズすることもできないことがわかりました。うまくいけば、彼らは将来のアップデートでサポートを拡張するでしょう。

4
Ben Whaley