dl icon indicating copy to clipboard operation
dl copied to clipboard

Настройка порта для БД

Open jasmanchik opened this issue 3 years ago • 7 comments

Сейчас нет возможности подключаться к БД например из IDE, так как нет проброса порта на локальную машину.

Предлагаю в кфг docker-compose-mysql.yaml сделать параметр "port" и подставлять туда значение из .env, соответственно у каждого проекта будет доступен свой порт для подключения и они смогут существовать параллельно. Еще лучше при запуске проекта (dl up) сделать проверку на доступность данного порта (который задаем в .env), и выкидывать ошибку, что этот порт уже занят другим контейнером

jasmanchik avatar Nov 18 '22 07:11 jasmanchik

На самом деле, порт 3306 пробрасывается, но только под IP контейнера. То есть можно посмотреть IP адрес контейнера с базой данных (через команду dl ps, например) и потом этот IP прописать в подключении IDE. Минус в таком подходе, IP будет меняться при каждом перезапуске контейнеров.

Я сейчас изучаю возможности traefik, умеет ли он проксировать запросы к бд, то есть хочу попробовать сделать локальный домен в качестве имени хоста к базе. Более сложным решением является запуск собственного DNS, который разрешает имена контейнеров. Но этот вариант потребует установки пакета resolvconf, то есть будет запрос на root доступ, что противоречит концепции DL.

img181120228674

img181120223828

varrcan avatar Nov 18 '22 07:11 varrcan

Понял, на счет IP не додумался. Буду ждать новостей по этой теме, спасибо

jasmanchik avatar Nov 18 '22 08:11 jasmanchik

Идей как сделать такое же подключение к wsl2 нет ?)

Bezponiki avatar Jan 14 '23 05:01 Bezponiki

Можно просто добавить в .env параметр типа MYSQL_LOCAL_PORT, и из него брать порт для локальной машины. Сейчас просто попробовал - получилось и решил написать image image

jasmanchik avatar Feb 02 '23 12:02 jasmanchik

Можно просто добавить в .env параметр типа MYSQL_LOCAL_PORT

Да, только если не указать MYSQL_LOCAL_PORT, то он будет по умолчанию 3306, таким образом одновременно 2 проекта уже не поднять, порт будет занят.

varrcan avatar Feb 04 '23 12:02 varrcan

К сожалению, через traefik так сделать нельзя.. https://github.com/traefik/traefik/issues/5155

varrcan avatar Feb 04 '23 14:02 varrcan

А есть способ проверить порт на занятость? Допустим если порт занят, то подбирать рандомный и так, пока не будет подобран свободный и показывать в результативном сообщении на каком порту доступна БД) А если порт указан в .env, и если он занят, то выкидывать ошибку и останавливать запуск контейнера

jasmanchik avatar Feb 27 '23 05:02 jasmanchik