docker
June 24

Отладка кода с помощью прод базы

Недавно к коллеге пришёл баг. Процесс поиска проблемы растянулся на несколько часов. Коллега нашёл нужный микросервис, запустил у себя в Docker (благо это дело работает через Docker) — и... бага не воспроизводится 🤷‍♂️

Мироксервис имел зависимость от MySQL базы данных. Было решено запустить микросервис локально, НО(!) с базой прода(но в режиме readonly, не волнуйтесь 😅)

Но тут нюанс: база доступна только через SSH-туннель. Просто так из Docker контейнера к ней не достучаться.

Было два варианта:

Настроить SSH прямо внутри контейнера. Отсюда вытекают такие действия как: установка OpenSSH, пробросить ssh ключи, поднятие соединения и т.д.

Использовать host.docker.internal — это такой специальный адрес, через который контейнер может достучаться до хост-машины. А туннель поднимем на хосте.

Выбрали второй вариант, потому что туннель уже был настроен.

На хост машине запустили

ssh -L 8899:connect-to-db.ru:3306 pankovri@proxy-to-db.ru

В .env микросервиса добавили:

DB_DSN="myDbLogin:myDbPassowrd@tcp(host.docker.internal:8899)/myDbName"

Запустили сервис — и через несколько минут отловили багу. Фикс полетел в прод в течение часа. Победа ✌️

А в конце коллега сказал: «Блин, совсем забыл про host.docker.internal. А ведь это было бы сразу проще».