Выбор ответа 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) резолвит имена контейнеров только в пользовательских сетях.

Варианты ответа

  1. Нужно опубликовать порт базы через -p 5432:5432, иначе API её не найдёт по имени
  2. В сети bridge по умолчанию нет DNS по именам; нужна пользовательская сетьправильный ответ
  3. Контейнеры в разных сетевых namespace никогда не видят друг друга по сети
  4. Имя контейнера нельзя использовать как hostname, только ID контейнера

Разбор

Встроенный DNS Docker (127.0.0.11) резолвит имена контейнеров только в пользовательских сетях. Решение: docker network create app-net и запуск обоих с --network app-net (compose делает это сам). Публикация порта открывает доступ с хоста, но не даёт имени. Контейнеры в одной сети прекрасно общаются, хотя у каждого свой namespace.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.