Для локального проекта Docker на macOS используйте bind mount, когда вам нужно редактировать или проверять одни и те же файлы в macOS и контейнере; используйте именованный том (named volume), когда контейнер должен владеть постоянными данными, такими как база данных или кэш. Практический тест заключается в том, нужен ли вам прямой доступ к файлам в Finder или приложении для Mac. Если да, примонтируйте конкретную папку проекта через bind mount. Если нет, храните данные в именованном томе под управлением Docker.

В чем разница между двумя типами монтирования?

Bind mount связывает путь на вашем Mac с путем внутри контейнера. Изменения видны с обеих сторон, что делает его удобным для исходного кода, конфигурации и сгенерированных файлов, которые вы хотите сохранить в папке проекта. Именованный том хранится и управляется Docker и подключается к контейнеру по выбранному пути. Docker рекомендует тома для постоянных данных контейнера и в тех случаях, когда хосту не требуется прямой доступ к файлам. Документация Docker по bind mount и документация по томам описывают эти различия.

Ваши данные Обычно выбирают Причина
Исходные файлы, редактируемые в Mac IDE Bind mount Mac и контейнер имеют доступ к файлам проекта.
Каталог данных базы данных Именованный том Docker управляет постоянными данными контейнера без необходимости передавать каждый файл базы данных через macOS.
Выходные данные, которые вы хотите открывать или использовать с помощью инструментов Mac Bind mount Результат появляется по выбранному пути на Mac.
Временное состояние, которое можно отбросить По умолчанию ни то, ни другое Подумайте, требуется ли данным постоянное хранение вообще; именованный том сохраняется после удаления контейнера, если вы не удалите его отдельно.

Почему на macOS этот выбор имеет значение

Docker Desktop запускает контейнеры Linux внутри виртуальной машины Linux, поэтому он выступает посредником при доступе между файловой системой Mac и контейнерами. В документации по настройкам Docker указано, что совместный доступ к файлам хоста создает накладные расходы; совместное использование слишком большого количества файлов может увеличить нагрузку на процессор и замедлить операции с файловой системой. В частности, рекомендуется хранить элементы, не являющиеся кодом (например, кэши и базы данных), в томе данных, когда важна производительность. Настройки Docker Desktop

Это руководство не означает, что каждый bind mount будет работать медленно. Это означает, что тип данных и ваш рабочий процесс имеют значение. Дерево исходных кодов проекта — естественный кандидат для bind mount, поскольку редактирование на Mac является основной целью. Множество постоянно изменяющихся файлов базы данных обычно не требуется просматривать в Finder, поэтому именованный том является более удачной отправной точкой. Для необычно больших репозиториев Docker Desktop также документирует синхронизированные общие папки (Synchronized file shares) как функцию, доступную по платной подписке, которая может улучшить производительность bind mount; она изменяет поведение совместного использования файлов, а не базовое различие между видимыми для хоста исходными текстами и томом, управляемым Docker. Synchronized file shares

Настройка папки проекта и тома базы данных

В Terminal перейдите в каталог проекта и используйте bind mount для кода. В этом примере текущая папка монтируется в /workspace в одноразовом контейнере Alpine; замените образ или команду в соответствии с вашим контейнером разработки.

docker run --rm -it \
  --mount "type=bind,source=$PWD,target=/workspace" \
  alpine:latest sh

В стандартных командных оболочках macOS переменная $PWD разворачивается в текущий каталог. Заключение всего аргумента монтирования в кавычки предотвращает разделение развернутого пути хоста, если имя папки содержит пробелы. Синтаксис --mount в Docker является явным. Путь на хосте должен существовать: в документации Docker указано, что отсутствие исходного пути по умолчанию приводит к ошибке выполнения --mount. Bind mount доступен для записи, если он не помечен как доступный только для чтения, поэтому процесс в контейнере может изменять файлы в смонтированном каталоге Mac. Используйте readonly, когда контейнеру требуется только читать проект. Параметры и поведение bind mount

Для данных, которыми владеет контейнер, создайте и подключите именованный том. Эта команда запускает PostgreSQL с томом в его стандартном каталоге данных:

docker volume create project-db

docker run --name project-postgres \
  --mount type=volume,source=project-db,target=/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD='local-dev-only' \
  -d postgres:17

Здесь project-db — имя постоянного тома, а POSTGRES_PASSWORD — демонстрационный локальный параметр, а не паттерн управления секретами в продакшене. Удаление контейнера не приводит к автоматическому удалению именованного тома. Это постоянство помогает при замене контейнеров, но также означает, что старые данные могут сохраниться и новый запуск может использовать их повторно. Сохраняйте имя тома и конфигурацию контейнера, необходимую для повторного подключения к нему.

Проверка видимости, переносимости и очистки

Перед выбором задайте себе вопрос: буду ли я открывать или редактировать именно эти файлы с помощью программ на Mac? Если да, примонтируйте через bind mount минимально необходимую для задачи папку, а не делитесь неоправданно широкой частью домашнего каталога. Docker отмечает, что macOS и Linux по-разному обрабатывают регистр символов в именах файлов, что может выявить проблемы с чувствительностью к регистру внутри контейнера. Внимательно проверяйте имена, если проект ведет себя иначе внутри Linux. Примечания по совместному использованию файлов в Docker Desktop

Если файлы должны оставаться в пределах контейнера, выберите именованный том и управляйте им с помощью команд Docker для работы с томами. Том не является обычной папкой в Finder в расположении проекта; Docker Desktop хранит свои данные Linux в среде своей виртуальной машины. Относитесь к удалению тома как к шагу удаления данных и создавайте резервные копии важного содержимого томов отдельно. В руководстве Docker по резервному копированию отмечается, что образы контейнеров не включают изменения файловой системы, сохраненные в подключенных томах. Резервное копирование и восстановление в Docker Desktop

Bind mount зависит от наличия пути на хосте, поэтому он может быть менее переносимым между компьютерами Mac с разной структурой каталогов. Именованный том избегает зависимости от пути проекта, но для его данных по-прежнему требуется четкий план резервного копирования или миграции. Таким образом, простым вариантом по умолчанию для многих проектов разработки на Mac является bind mount для исходного кода и именованный том для состояния базы данных, с фиксацией расположения каждого типа данных в конфигурации Compose или инструкциях по запуску проекта.

Источники