Pertanyaan Mengekspos beberapa port dari Docker dalam Elastic Beanstalk


Dari membaca dokumentasi AWS, tampak bahwa ketika menggunakan Docker sebagai platform pada Elastic Beanstalk (EB) (berlawanan dengan Tomcat, dll.), Hanya satu port yang dapat diekspos. Saya mencoba memahami mengapa Amazon menciptakan pembatasan ini - sepertinya Anda sekarang bahkan tidak dapat melayani HTTP dan HTTPS.

Saya ingin menggunakan Docker sebagai penampung karena memungkinkan saya menjalankan beberapa proses server yang saling terhubung dalam penampung yang sama, beberapa di antaranya memerlukan beberapa port (misalnya RTSP). Apakah ada solusi untuk aplikasi semacam ini, di mana mengatakan server RTSP dan HTTP keduanya dapat berjalan dalam kontainer Docker yang sama pada EB?


32
2017-09-14 01:30


asal


Jawaban:


Anda bisa menulis file konfig awal untuk LoadBalancer / ReversProxy dari Elastic Beanstalk untuk meneruskan port tambahan ke instance EC2-nya. sebuah contoh dari 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"
      } ]
    }
  }
}

Ref:


4
2017-12-28 09:02



Meskipun tidak ada dokumentasi yang menjelaskannya, Single Container Docker Environment tidak mendukung pemetaan beberapa port

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

Dengan konfigurasi di atas, port 8080 docker akan dipetakan ke mesin host port 80 dan port 8090 docker akan dipetakan ke host port 9000.

Agar lebih jelas, selalu port pertama dalam daftar akan dipetakan ke host port mesin 80 dan sisanya akan dipetakan ke hostPort yang ditentukan (atau) sama dengan port kontainer tanpa port host.


9
2017-11-03 12:29



Dalam bentuknya saat ini, dukungan Docker di Elastic Beanstalk paling tidak menguntungkan. FWIW saya menulis sebuah posting blog mengevaluasi EB yang menyentuh ini. Saya menemukan bahwa selain pengamatan Anda tentang port, tidak mungkin untuk menjalankan beberapa kontainer, atau bahkan menyesuaikan docker run perintah. Semoga mereka akan memperpanjang dukungan dalam pembaruan di masa mendatang.


4
2017-10-13 15:32