Выбор ответа Junior Docker для разработчика спрашивают часто обновлено
localhost внутри контейнера
Вопрос
В Compose есть сервисы api и db (PostgreSQL). API подключается к postgres://app:app@localhost:5432/app и получает «connection refused». Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: localhost в контейнере api это сам api; нужен хост db. У каждого контейнера своё сетевое пространство имён, и localhost указывает на него самого.
Варианты ответа
localhostв контейнере api это сам api; нужен хостdbправильный ответ- PostgreSQL в Docker слушает другой порт, 15432
- Нужно добавить
network_mode: bridgeобоим сервисам - Compose не создаёт сеть между сервисами без
networks
Разбор
У каждого контейнера своё сетевое пространство имён, и localhost указывает на него самого. Compose создаёт общую сеть, где сервисы доступны по именам: postgres://app:app@db:5432/app.
- Порт PostgreSQL по умолчанию тот же, 5432.
bridgeэто и так тип сети по умолчанию.- Compose как раз создаёт сеть проекта автоматически.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.