Как получить два docker-контейнера, размещенных в aws для разговора? - PullRequest
0 голосов
/ 10 мая 2018

Я новичок, когда дело доходит до докера и AWS, поэтому очень вероятно, что я упустил что-то тривиальное, но я застрял в этой проблеме в течение довольно долгого времени.

Итак, у меня есть три док-контейнера, размещенных в aws - contA, contB и contC.contA и contB являются частью одной виртуальной сети.contC - автономный контейнер.contA - это запущенный сервер koa, на котором зарегистрированы несколько конечных точек API.contB запускает службу oauth.В contC запущен сервер udp nodejs.То, что я пытаюсь сделать, это сделать почтовый вызов конечной точки внутри contA из contC.Так что внутри сервера udp я просто делаю выборочный пост-вызов на «xxx.com/some/endpoint».При попытке проверить, работает ли связь между contC и contA, я создал контейнеры из изображений, размещенных в aws, сопоставил соответствующие публичные и частные порты и запустил контейнеры.Но я получил сообщение о том, что

'FetchError: запрос на xxx.com/some/endpoint не выполнен, причина: getaddrinfo ENOTFOUND xxx.com xxx.com:443'

Я не хочупродолжение, чтобы быть частью той же виртуальной сети.Я попытался добавить --link из contC в contA при создании контейнера Docker.Но это не помогло.Любое понимание того, как решить, было бы очень полезно.Спасибо!

Обновление Я понял, что проблема в разрешении имени хоста в contC. Я могу получить доступ к этим конечным точкам в Postman.Я также могу пинговать другие публичные конечные точки.Есть ли способ настроить файл /etc/resolv.conf контейнера для разрешения xxx.com в xxx.xx.xx.xxx?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

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

Так что при создании контейнера вы включаете --dns = 'some.ip.address.' опция и говорит контейнеру разрешить xxx.com в some.ip.address. Команда будет выглядеть примерно так

запуск Docker-контейнера -p 8080: 80 --dns = '192.62.0.7' image-name

0 голосов
/ 10 мая 2018

Если я правильно понял проблему

Нельзя.

Вам нужно связаться с ресурсом в VPC из-за пределов VPC. Который побеждает цель VPC в первую очередь. Правильно!

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

Это может вас развлечь
Amazon API Gateway поддерживает интеграцию конечных точек с частными VPC

Теперь вы можете предоставить доступ к ресурсам HTTP (S) в вашем Amazon Виртуальное частное облако (VPC), не подвергая их общедоступный интернет.

Или еще

Сделайте эти конечные точки общедоступными, чтобы не контейнер VPC мог их ударить.

Debug
Можете ли вы подключиться к защищенным конечным точкам VPC со своего ноутбука (общедоступный интернет),
Если да, то ваш контейнер не VPC должен делать то же самое
Если нет, то как плохой контейнер не VPC может использовать эти конечные точки: (


Ошибка: getaddrinfo ENOTFOUND

Также взгляните на этот ТАК вопрос, связанный с той же ошибкой
Таким образом, либо DNS не может разрешить URL (потому что защитная оболочка VPC rocks)
или
Неправильный формат URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...