local-deploy/dl

взаимодействие локальных площадок

VlMescher opened this issue · 5 comments

У меня 2 запущеных проекта. К примеру shop.localhost и crm.localhost

К сожалению запрос с одной площадки на апи соседней не работает.
Если проверить какой ip резолвится внутри площадки по хосту, то получаем 127.0.0.1

В итоге приходится общаться через nip.io

Хотел уточнить возможно ли, чтобы и внутри площадок резолвились корректные локальные ip адреса

Вообще так было задумано изначально, чтобы несколько запущенных проектов не пересекались и не мешали друг другу работать.
Каждый проект запускается в своей собственной сети и внутри php контейнера проекта всегда будет localhost 127.0.0.1 . Но он тут не при чем, у вас немного другая проблема.

Если я вас правильно понял, внутри одной сети docker IP адрес другого проекта резолвится как 127.0.0.1, поэтому он не выходит за пределы контейнера и пытается обратиться внутри него. Просто потому что localhost. Потому что он в принципе не должен выходить за пределы своей сети.

Это примерно как если бы вы пытались открыть сайт со своего компьютера по адресу localhost, который запущен на другом компьютере в локальной сети. При этом nip.io будет нормально работать, все правильно, потому что это внешний адрес, docker не будет искать IP внутри контейнера, а обратится во внешнюю сеть.

Из одной docker-сети в другую сеть вы сможете обратиться только по внешнему IP адресу контейнера, его можно увидеть введя команду dl ps, но этот IP не постоянный и устанавливается Docker случайным при старте.

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

Если честно, в голову ничего не приходит умного. Потребуется немного переделать базовую архитектуру создания контейнеров, чтобы они запускались в одной сети. При этом контейнеры базы данных должны быть расположены либо в других сетях, либо не со стандартным портом 3306, ибо будут конфликтовать.
Да, порт php тоже будет конфликтовать, из-за того, что общая сеть. Возможно потребуется поставить nginx между traefik и контейнерами php, чтобы по хостам трафик распределял.

Кажется придется здорово так переписать конфиги docker-compose, это будет очень кастомное решение, от dl останется только traefik разве что.

итог ясен. Оно того не стоит. Спасибо большое. А ip можно задать принудительно для конейнера? Чтобы не рандомный был

В принципе возможно, но все равно придется переписать конфиги
Как пример https://jtips.dev/naznachaiem-statichieskii-ip-adries-docker-kontieinieru-i-docker-compose/