Предоставление нескольких портов от Docker внутри эластичного бобового стека

Из чтения документации AWS видно, что при использовании Docker в качестве платформы на Elastic Beanstalk (EB) (в отличие от Tomcat и т.д.) может быть открыт только один порт. Я пытаюсь понять, почему Amazon создал это ограничение - кажется, что теперь вы не можете даже обслуживать HTTP и HTTPS.

Я бы хотел использовать Docker в качестве контейнера, поскольку он позволяет мне запускать несколько взаимосвязанных серверных процессов в одном контейнере, некоторые из которых требуют нескольких портов (например, RTSP). Существуют ли какие-либо обходные пути для такого приложения, где говорят, что RTSP и HTTP-сервер могут работать в одном контейнере Docker на EB?

Ответ 1

Вы можете написать конфигурационный файл на старте для 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"
      } ]
    }
  }
}

Ref:

Ответ 2

В своей нынешней форме поддержка Docker в Elastic Beanstalk в лучшем случае минимальна. FWIW Я написал сообщение в блоге, в котором оценивался EB, который касался этого. Я обнаружил, что помимо наблюдения за портами невозможно запустить несколько контейнеров или даже настроить команду docker run. Надеюсь, они будут поддерживать поддержку в будущем обновлении.

Ответ 3

Несмотря на то, что ни одна из документации не объясняет это, среда одноконтактной докеры поддерживает сопоставление нескольких портов

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

С приведенной выше конфигурацией порт 8080 докера будет отображаться на порт 80 хост-машин, а порт 8090 докера будет отображаться на порт 9000 машинного компьютера.

Чтобы быть более ясным, первый порт в списке будет отображаться на столбец 80-го компьютера, а оставшиеся будут отображены на указанный хост-узел (или) таким же, как порт контейнера, в отсутствие порта хоста.