Связывание контейнера в AWS Fargate

Я пытаюсь настроить небольшой пример на AWS Fargate и пытаюсь иметь там один контейнер приложения с одним контейнером базы данных.

Определение задачи запускает оба контейнера, но мой контейнер приложения не работает с getaddrinfo ENOTFOUND db db:3306. Следовательно, контейнер моего приложения не может быть найден контейнером базы данных.

Поскольку Fargate не разрешает «ссылки» на контейнеры Docker, я хотел бы знать, как они могут взаимодействовать друг с другом. Контейнер базы данных имеет имя db с портом 3306, и мой контейнер приложения настроен на его использование.

К сожалению, определение ссылок контейнеров недоступно для Fargate, а только для "oldschool" ECS / EC2.

В локальной настройке docker-compose это работает так.


person sebastian    schedule 04.12.2017    source источник
comment
Но какое изменение вы внесли для решения своей проблемы? На основании принятого вами ответа ничего менять не требуется.   -  person OK999    schedule 05.08.2018
comment
В моем развернутом приложении я попытался ссылаться на БД как на db: 3306. Когда я развертываю приложение и db и ссылаюсь на db с помощью localhost: 3306 (вместо имени службы), он работает.   -  person sebastian    schedule 08.08.2018


Ответы (2)


Контейнеры в задачах Fargate совместно используют сетевое пространство имен, поэтому вам вообще не нужно использовать ссылки. Вы можете просто общаться через localhost.

Например, если у вас есть контейнер A, на котором запущен веб-сервер на порту 8000, контейнер B может связаться с ним с помощью curl http://localhost:8000/

person Noah    schedule 19.12.2017
comment
Спасибо, очень полезно! - person Gonzalo Bahamondez; 13.02.2018
comment
@Noah, как бы вы поступили с сервисами A и B, которые слушают 8080 внутренне, например 2 проекта весенних ботинок - person toske; 09.04.2018
comment
@Noah Как это указать в cloudFormation? - person Sangam Belose; 20.04.2018
comment
@toske. Вам нужно переместить одну из служб в другой порт. Или, теоретически, если вы хотите, чтобы один из них был доступен для localhost, а другой - для сети, вы можете явно привязать один к 127.0.0.1, а другой - к другому адресу. - person Noah; 21.04.2018
comment
@SangamBelose Для этого не нужно ничего указывать в облачной информации. Режим awsvpc, будь то в ECS или Fargate, подразумевает общее сетевое пространство имен (например, общий локальный хост) - person Noah; 21.04.2018
comment
Что нужно сделать, чтобы настроить выполнение задач на разных портах? - будет ли это сделано через Port Mappings portMappings: [{hostPort: 80, protocol: tcp, containerPort: 8080} в определении задачи? - person fuzzi; 18.10.2018
comment
Дополнительная информация на AWS - aws.amazon.com/blogs/ вычисления / задачи-сети-в-aws-fargate - person Sơn Lâm; 25.03.2019

Вероятно, вы можете настроить его так, чтобы службы могли общаться друг с другом через общедоступный IP-адрес, а затем защищать порты с помощью VPC, на котором только службы могут общаться друг с другом.

person Jeff Loiselle    schedule 19.12.2017
comment
А как узнать публичный IP-адрес при сборке контейнера? Возможно, вы могли бы сделать это, сначала назначив EIP, а затем подключив его к Fargate. Я не думаю, что вы сможете ... Использовать localhost намного проще! - person Max Allan; 29.06.2019