Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

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.

Полезные материалы
Рекомендуем