Как связать 2 контейнера, запущенных в задаче AWS ECS - PullRequest
1 голос
/ 11 июня 2019

Я новичок в ECS и пытаюсь развернуть пару контейнеров в задаче ECS с помощью Fargate.

У меня работает 1 контейнер, который использует Angular2 и работает на nginx, другой контейнер - это бэкэнд, работает на Springboot и использует порт 42048.

Я использую сеть awsvpc с Fargate, и я должен сделать это таким образом.

Приложение Angular связывается с бэкэндом с помощью localhost: 42048 / some_url, и оно отлично работает в моем локальном докере, но в AWS интерфейс не находит бэкэнд. В настоящее время мои порты сопоставлены с 80 для внешнего интерфейса и 42048 для бэкэнда, и внешний интерфейс при локальном развертывании смог найти бэкэнд как localhost: 42048

Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 11 июня 2019

в AWSVPC не разрешено связывание.

Вы можете выполнять связывание только в сетевом режиме, когда он установлен на мост.

links

Type: string array

Required: no

Параметр link позволяет контейнерам связываться друг с другом. без необходимости сопоставления портов. Поддерживается только если сеть режим определения задачи установлен на мост. Имя: internalName Конструкция аналогична name: псевдоним в ссылках Docker. До 255 буквы (прописные и строчные), цифры, дефисы и подчеркивания разрешены. Для получения дополнительной информации о связывании контейнеров Docker, перейдите в https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/. Этот параметр сопоставляется со ссылками в разделе «Создание контейнера» Docker Remote API и опция --link для запуска Docker.

Примечание

Этот параметр не поддерживается для контейнеров или задач Windows, использующих сетевой режим awsvpc.

Важно

Контейнеры, расположенные в одном экземпляре контейнера, могут обмениваться данными друг с другом, не требуя ссылок или сопоставлений портов хоста. Сетевая изоляция достигается на экземпляре контейнера с использованием групп безопасности и настроек VPC.

task_definition_parameters

В сетевом режиме вы должны определить два контейнера в одном и том же определении задачи, а затем упомянуть имя контейнера в ссылке.

enter image description here А затем упомянул имя внутреннего контейнера в интерфейсе внешнего контейнера.

enter image description here

0 голосов
/ 12 июня 2019

С Fargate, если вы хотите получить доступ к своему бэкэнду, используя localhost:42048, тогда вы можете попробовать настроить свой Frontend и Backend в одном и том же определении Задачи.При развертывании задачи все контейнеры, определенные в одном и том же определении задачи, будут работать на одном базовом хосте, и мы можем получить к нему доступ с помощью localhost.Помните, что хранилище Fargate является эфемерным, и ваш бэкэнд не должен поддерживать состояние приложения в контейнере.

...
"containerDefinitions": [
    {
      "name": "frontend",
      "image": "my-repo/angularapp",
      "cpu": 256,
      "memory": 1024,
      "essential": true,
      "portMappings": [ {
          "containerPort": 8080,
          "hostPort": 8080
       }
     ]
    },
    {
      "name": "backend",
      "image": "my-repo/springboot",
      "cpu": 256,
      "memory": 1024,
      "essential": true,
      "portMappings": [ {
          "containerPort": 42048,
          "hostPort": 42048
       }
     ]
    }
  ]
...  

Но я боюсь, что этот подход подходит для промышленного уровня.

...