Докер, особенно на сложных системах контейнеров, на MacOs работает намного медленнее, чем на нативном Linux, это факт. Можно ознакомится с бенчмарками.
Мониторю состояние проблемы я по вот этой задаче на гитхабе.
Начиная с 17.04 CE Edge onwards появились новые флаги для выполнения docker run -v позволяющие управлять степенью синхронности примонтированного волума:
- consistent: полная согласованность. Контейнер и хост синхронны постоянно. Это значение по умолчанию. И на macOs это медленно, из за медленной работы osfx
- cached: файлы хоста для mount является авторитетным. Может быть задержка в переносе данных и обновлениях, сделанные на хосте, будут видны внутри контейнера через некоторое время. Используется для улучшения производительности чтения в контейнер с хост-машины. Детали реализации и настройки можно прочитать тут
- delegated: файлы контейнера для mount является авторитетным. Может быть задержка в переносе данных и обновлениях, сделанных в контейнере, до того как они будут видны на хосте. На текущий момент в 17.04 delegated ведет себя идентично consistent.
Команда Docker для Mac планирует выпустить улучшенную реализацию делегированных в будущем, чтобы ускорить работу с большими объемами записи.
На текущий момент есть два решения, в случае если :cached не решает вопроса:
- d4m-nfs
- docker-sync и подобные решения, основанные на rsync/event based syncing (быстрая синхронизация, но нужно изменить настройки, и можно столкнуться с проблемами синхронизации)
Я пользовался вторым из решений, оно действительно быстрое(было до последнего обновления пару дней назад) — сейчас проблема в первом запуске при развертывании — первичное копирование с хост-машины внутрь контейнера проходит достаточно долго в приложении на symfony3 (связано с значительным объемом папки vendor)