Выбор ответа Junior Сети и тома спрашивают часто обновлено
Контейнеры не видят друг друга по имени
Вопрос
Запустили docker run -d --name db postgres:16 и docker run -d --name api my/api без указания сети. API не может подключиться к хосту db. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В сети bridge по умолчанию нет DNS по именам; нужна пользовательская сеть. Встроенный DNS Docker (127.0.0.11) резолвит имена контейнеров только в пользовательских сетях.
Варианты ответа
- Нужно опубликовать порт базы через
-p 5432:5432, иначе API её не найдёт по имени - В сети
bridgeпо умолчанию нет DNS по именам; нужна пользовательская сетьправильный ответ - Контейнеры в разных сетевых namespace никогда не видят друг друга по сети
- Имя контейнера нельзя использовать как hostname, только ID контейнера
Разбор
Встроенный DNS Docker (127.0.0.11) резолвит имена контейнеров только в пользовательских сетях. Решение: docker network create app-net и запуск обоих с --network app-net (compose делает это сам). Публикация порта открывает доступ с хоста, но не даёт имени. Контейнеры в одной сети прекрасно общаются, хотя у каждого свой namespace.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.