Как контейнеры типа ECS Fargate взаимодействуют друг с другом?

avatar
Omori
9 августа 2021 в 05:33
424
1
0

Проблема

Как контейнеры ECS Fargate взаимодействуют друг с другом?

Ситуация

Я использую интеграцию docker compose с ecs.
В контексте докера AWS docker compose up правильно выполнил развертывание.
Но обратный прокси работает некорректно, возможно из-за связи с контейнерами.

Мой docker-compose.yml

version: '3'
services:
  nginx:
    image: {ACCOUNT}.dkr.ecr.{REGION}.amazonaws.com/{MY_IMAGE}
    ports:
      - "80:80"

  nodeapp:
    image: {ACCOUNT}.dkr.ecr.{REGION}.amazonaws.com/{MY_REACT_IMAGE}
    working_dir: /src
    command: sh -c "yarn install && yarn build && yarn start"
    ports:
      - "3000:3000"

МОЙ nginx.conf

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://localhost:3000/;
        # proxy_pass http://nodeapp:3000/; // works only for local
        # proxy_pass http://nodeapp.{MY CLUSTER}.local:3000/; // doesn't work

    }
}

Мое понимание

  1. В одной и той же службе ECS контейнеры могут взаимодействовать друг с другом через localhost.
  2. В другой службе ECS контейнеры могут взаимодействовать друг с другом с помощью обнаружения службы.

Это правильно? И как мне это сделать?

1: та же служба ECS

Сначала я пытался это сделать. Но docker compose up(интеграция с ecs) создал разные службы (для службы nginx и службы приложения (реагирования). Как мне это настроить?

2: Другой сервис

В конфигурации nginx proxy_pass http:nodeapp.{MY_CLUSTER}.local:3000 работает неправильно.


Как контейнеры ECS взаимодействуют друг с другом?
Дайте мне знать самый простой способ.
Заранее спасибо.

Источник

Ответы (1)

avatar
TheQueenIsDead
9 августа 2021 в 08:09
0

Документация Docker прекрасно описывает, как это работает.

https://docs.docker.com/cloud/ecs-integration/#service-discovery

Ваше понимание

  1. Нет, контейнеры не будут взаимодействовать друг с другом через локальный хост. Контейнеры — это отдельные объекты, которые отделяют запущенные процессы от основного процесса. Если они не запущены с сетью host, они не имеют доступа к хост-ОС и, следовательно, не могут видеть друг друга по своему собственному адресу замыкания на себя.
  2. Когда контейнеры развертываются с помощью docker-compose, AWS настраивает необходимый DNS, чтобы ваши контейнеры могли подключаться обычным образом (через имя службы), а также через <service>.<compose_project_name>.local. Настройка и разрешение этого DNS может занять некоторое время, поэтому ваше приложение должно иметь возможность обрабатывать задержки.

Похоже, вы правильно поняли nodeapp.{MY_CLUSTER}.local:3000. Вам следует включить журналы ошибок, которые вы видите при развертывании, чтобы помочь вам в дальнейшем.

Важно помнить, что для полной поддержки с AWS необходимо указать версию файла компоновки 3.8 ????

Похожие вопросы

Стоит отметить, что этот вопрос уже задавался ранее, и он легко появляется при поиске ответов:

Заставить контейнеры взаимодействовать друг с другом в Elastic Container Service (ECS)?