Pregunta Exponer múltiples puertos de Docker dentro de Elastic Beanstalk


A partir de la lectura de la documentación de AWS, parece que al usar Docker como la plataforma en Elastic Beanstalk (EB) (a diferencia de Tomcat, etc.), solo se puede exponer un solo puerto. Estoy tratando de entender por qué Amazon creó esta restricción, parece que ahora ni siquiera puede servir HTTP y HTTPS.

Me gustaría utilizar Docker como contenedor, ya que me permite ejecutar varios procesos de servidor interconectados dentro del mismo contenedor, algunos de los cuales requieren varios puertos (por ejemplo, RTSP). ¿Hay soluciones para este tipo de aplicación, por ejemplo, un RTSP y un servidor HTTP pueden ejecutarse dentro del mismo contenedor Docker en EB?


32
2017-09-14 01:30


origen


Respuestas:


Puede escribir un archivo de configuración de inicio para LoadBalancer / ReversProxy de Elastic Beanstalk para reenviar los puertos adicionales a su (s) instancia (s) EC2. un ejemplo de 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"
      } ]
    }
  }
}

Árbitro:


4
2017-12-28 09:02



Aunque ninguna de la documentación lo explica, Single Container Docker Environment admite el mapeo de múltiples puertos

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

Con la configuración anterior, el puerto 8080 de la ventana acoplable se asignará a las máquinas host del puerto 80 y el puerto 8090 de la ventana acoplable se asignará al puerto 9000 de la máquina host.

Para ser más claro, siempre el primer puerto de la lista se asignará al puerto 80 de la máquina host y el resto se asignará a hostPort especificado (o) al igual que el puerto de contenedor en ausencia de puerto de host.


9
2017-11-03 12:29



En su forma actual, el soporte Docker en Elastic Beanstalk es marginal en el mejor de los casos. FWIW escribí una publicación de blog evaluando EB que tocó esto. Descubrí que, además de su observación sobre los puertos, no es posible ejecutar varios contenedores, ni siquiera personalizar el docker run mando. Con suerte, ampliarán el soporte en una futura actualización.


4
2017-10-13 15:32