Предоставление нескольких портов от 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-го компьютера, а оставшиеся будут отображены на указанный хост-узел (или) таким же, как порт контейнера, в отсутствие порта хоста.