Получить доступ

Как в Docker хранить данные и как контейнеры общаются по сети?

JuniorDocker и контейнерыDocker
Ещё спрашивают так:
  • Чем volume отличается от bind mount?
  • Почему контейнер не может подключиться к localhost?
Коротко

Volume — хранилище под управлением Docker, переживает пересоздание контейнера (базы данных). Bind mount — каталог хоста внутрь контейнера (разработка, конфиги). Сеть: в пользовательской bridge-сети контейнеры видят друг друга по имени сервиса; localhost внутри контейнера — это сам контейнер, а не хост. Публикация порта -p 8080:80 открывает порт на хосте.

  • Docker Compose создаёт общую сеть, обращаться по имени сервиса: postgres:5432
  • Доступ к хосту из контейнера — host.docker.internal (Docker Desktop) или IP шлюза
  • tmpfs — данные только в памяти

А ещё -p 0.0.0.0:5432 открывает БД всему миру; для локальной работы — 127.0.0.1:5432:5432

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Хранилища:

  • volume — Docker хранит данные в своей области, удобно для БД и переносимо;
  • bind mount — конкретный путь хоста, удобно для разработки (горячая перезагрузка кода), зависит от прав и структуры хоста;
  • запись в файловую систему контейнера — теряется при пересоздании.

Сеть:

  • сеть по умолчанию bridge — изолированная подсеть с NAT;
  • в пользовательских сетях работает DNS по имени контейнера или сервиса;
  • network_mode: host — контейнер использует сеть хоста напрямую (только Linux).

Типичная ошибка: приложение в контейнере подключается к localhost:5432 и не находит базу, запущенную в соседнем контейнере или на хосте.

depends_on гарантирует порядок запуска, но не готовность сервиса — нужны healthcheck и повторные попытки подключения.

Пример

services:
  api:
    build: .
    ports: ["127.0.0.1:8080:8080"]
    environment:
      DB_URL: postgres://postgres:5432/app   # имя сервиса, а не localhost
    depends_on: [postgres]
  postgres:
    image: postgres:16
    volumes: ["pgdata:/var/lib/postgresql/data"]
volumes:
  pgdata:

Что хотят услышать

  • Volume против bind mount.
  • Сеть, DNS по именам и смысл localhost.
  • Публикация портов и безопасность.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем