Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
DOCKER_VOLUME_BIND Linux / DevOps

Docker: как пробросить папку с хоста внутрь контейнера (Volumes и Bind Mount)

Обновлено: 26.08.2026  ·  Официальная база знаний

При перезапуске или обновлении контейнера Docker все созданные файлы, картинки сайта или базы данных стираются, либо разработчику неудобно редактировать код сайта, так как файлы заперты внутри контейнера.

Зачем монтировать папки в Docker?

По умолчанию контейнеры не сохраняют данные после удаления (они одноразовые). Чтобы данные сохранялись на вашем реальном сервере навсегда, используется механизм Bind Mount (привязка папки).


Синтаксис флага `-v` (Volume / Mount)

Формула проста: -v /ПАПКА_НА_ВАШЕМ_СЕРВЕРЕ:/ПУТЬ_ВНУТРИ_КОНТЕЙНЕРА


Практический пример: Запуск Nginx со своими HTML-файлами

Шаг 1. Создаем папку с сайтом на хосте (сервере)

mkdir -p /home/ubuntu/my_site
echo "<h1>Привет из проброшенной папки!</h1>" > /home/ubuntu/my_site/index.html

Шаг 2. Запускаем контейнер с флагом `-v`

sudo docker run -d \
  --name web_with_files \
  -p 80:80 \
  -v /home/ubuntu/my_site:/usr/share/nginx/html \
  nginx

Что произошло: Мы связали локальную папку /home/ubuntu/my_site со стандартной веб-папкой Nginx внутри контейнера /usr/share/nginx/html.


Шаг 3. В чем супер-сила этого метода?

Теперь вы можете редактировать файл /home/ubuntu/my_site/index.html любым редактором (nano, VS Code) прямо на сервере или через WinSCP — изменения на сайте появятся **мгновенно без перезапуска контейнера**!

Практический опыт инженера: Всегда указывайте абсолютный полный путь к монтируемой папке (начиная со слэша /). Если хотите использовать текущую директорию, используйте переменную окружения: -v $(pwd):/app.

Частые вопросы (FAQ)

В чем разница между Bind Mount (-v /path:/path) и Named Docker Volumes (-v volume_name:/path)?

Bind Mount монтирует конкретную существующую папку с вашего диска (удобно для исходного кода и конфигов). Named Volumes управляются самим Докером и хранятся в специальной системной директории /var/lib/docker/volumes/ (идеально для баз данных MySQL/PostgreSQL).

Почему при монтировании пустой папки с хоста все файлы внутри контейнера исчезли?

Bind Mount работает как вставка флешки: если вы монтируете пустую локальную папку в системную директорию контейнера, она перекроет собой существующее содержимое контейнера.

Как смонтировать папку только в режиме 'только чтение' (Read-Only)?

Добавьте суффикс ':ro' в конец флага: -v /home/ubuntu/config:/etc/nginx:ro. Контейнер не сможет случайно удалить или изменить файлы на вашем сервере.

Как пробросить папку в Docker на Windows (Docker Desktop)?

Укажите путь Windows через прямые слэши: -v C:/Users/Name/Projects/site:/usr/share/nginx/html.