Самая частая жалоба новичка звучит так: приложение не видит базу, хотя всё запущено. Причина почти всегда одна — внутри контейнера localhost означает сам контейнер, а не машину, на которой он работает. База стоит рядом, но в другом сетевом пространстве.
В связке сервисов адресом служит имя сервиса. Контейнеры в одной пользовательской сети находят друг друга по именам, и обращаться нужно к ним, а не к адресу петли. При этом порт указывается внутренний — тот, который слушает процесс, а не тот, который проброшен наружу.
Проброс портов вообще нужен только для доступа снаружи. Если к базе ходит только приложение из той же сети, публиковать её порт на хосте не нужно, а часто и опасно: незаметно для себя можно выставить базу в интернет.
Полезно помнить и про порядок: сеть поднимается раньше сервисов, а вот готовность процесса внутри контейнера не гарантирована ничем. Запущенный контейнер и работающий сервис — разные вещи.
Docker на Практике
@docker_practice_ru_n1k
Самая частая жалоба новичка звучит так: приложение не видит базу, хотя всё запущено. Причина почти всегда одна
Этот пост опубликован в Telegram-канале Docker на Практике. Подписаться можно по ссылке: @docker_practice_ru_n1k.