У меня есть приложение (работает на http://localhost:8080), которое взаимодействует с API-интерфейсом сервера, работающим на http://localhost:8081.. Я отдельно докертизировал внешний интерфейс и серверную часть и запускаю их через docker-compose локально, работает отлично без каких-либо проблем. Но когда я запускаю его в ECS, клиент не может найти http://localhost:8081(backend).
Я использую группу AutoScaling с Elastic Load Balancer, и оба моих контейнера определены в одном определении задачи. Кроме того, у меня есть бэкэнд, связанный с интерфейсом. Когда я запускаю ssh в своем экземпляре ECS и запускаю docker ps -a
, я вижу, что оба моих контейнера работают на правильных портах точно так же, как на моей локальной машине ( Результат docker ps -a ), и я могу успешно пропинговать каждый из них из одного контейнера в другой.
Определение задачи
"CartTaskDefinition": {
"Type": "AWS::ECS::TaskDefinition",
"Properties": {
"ContainerDefinitions": [
{
"Name": "cs-cart",
"Image": "thishandp7/cs-cart",
"Memory": 400,
"PortMappings":[
{
"ContainerPort": "8080",
"HostPort": "8080"
}
],
"Links": [
"cs-server"
]
},
{
"Name": "cs-server",
"Image": "thishandp7/cs-server",
"Memory": 450,
"PortMappings":[
{
"ContainerPort": "8081",
"HostPort": "8081"
}
],
}
]
}
}
Слушатели в моем ElasticLoadBalancer,
Первый слушатель для внешнего интерфейса, а второй - для внутреннего
"Listeners" : [
{
"LoadBalancerPort": 80,
"InstancePort": 8080,
"Protocol": "http"
},
{
"LoadBalancerPort": 8081,
"InstancePort": 8081,
"Protocol": "tcp"
}
],
EC2 instacne security Group Правила доступа:
"SecurityGroupIngress" : [
{
"IpProtocol" : "tcp",
"FromPort" : 8080,
"ToPort" : 8080,
"SourceSecurityGroupId" : { "Ref": "ElbSecurityGroup" }
},
{
"IpProtocol" : "tcp",
"FromPort" : 8081,
"ToPort" : 8081,
"SourceSecurityGroupId" : { "Ref": "ElbSecurityGroup" }
},
{
"IpProtocol" : "tcp",
"FromPort" : 22,
"ToPort" : 22,
"CidrIp" : "0.0.0.0/0"
}
],
Docker Compose
version: "3.5"
services:
cart:
build:
context: ..
dockerfile: docker/Dockerfile
args:
APP_LOCATION: /redux-saga-cart/
PORT: 8080
networks:
- server-cart
ports:
- 8080:8080
depends_on:
- server
server:
build:
context: ..
dockerfile: docker/Dockerfile
args:
APP_LOCATION: /redux-saga-shopping-cart-server/
PORT: 8081
ports:
- 8081:8081
networks:
- server-cart
networks:
server-cart:
Быстрое обновление: я пробовал это в сетевом режиме awsvpc с балансировщиком нагрузки приложения. Все еще не работает
Заранее спасибо.