Монтирование томов Docker для Mac отличается от базовой системы Docker. В основном это связано с тем, что Docker пытается соответствовать рекомендациям Apple по песочнице файловой системы.
Как показано в настройках Docker, macOS экспортирует только определенные пути.
/Users
/Volumes
/tmp
/private
/var
в macOS - это символическая ссылка на /private
. Это также верно для /tmp
:
$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /var -> private/var
Почему /tmp
отображается в панели общего доступа, но /var
нет (хотя оба являются ее частью /private
)? В документации Docker для Mac о пространствах имен файловой системы объясняется:
По умолчанию, вы можете обмениваться файлами в /Users/
, /Volumes/
, /private/
и /tmp
непосредственно. Чтобы добавить или удалить деревья каталогов, которые экспортируются в Docker, используйте вкладку «Общий доступ к файлам» в меню настроек Docker -> Настройки -> Общий доступ к файлам. (См. Предпочтения.)
Все остальные пути, используемые при -v
монтировании привязки, берутся из виртуальной машины Moby Linux, на которой запущены контейнеры Docker, поэтому такие аргументы, как, -v /var/run/docker.sock:/var/run/docker.sock
должны работать должным образом. Если путь macOS не является общим и не существует в виртуальной машине, попытка привязать его монтирование не удастся, а не создать его на виртуальной машине. Пути, которые уже существуют в виртуальной машине и содержат файлы, зарезервированы Docker и не могут быть экспортированы из macOS.
Обратите внимание, что /var/run
это специально упомянуто здесь как место, которое будет монтироваться из виртуальной машины Linux, а не из macOS.
Когда вы запрашиваете монтирование тома, сначала проверяется экспорт файловой системы macOS. Если совпадений нет, следующей проверяется виртуальная машина Linux, на которой запущен Docker. Если ни один из них не имеет запрошенного вами пути, то монтирование не выполняется.
В вашем случае /var
не экспортируется macOS. /var
существует в виртуальной машине Linux, но /var/folders
не существует. Следовательно, путь недоступен, и монтирование не выполняется.
Если вы измените путь на /private/var
, то это будет успешно, потому что macOS экспортирует все /private
дерево файловой системы для монтирования.
Чтобы сделать вещи более портативными, вы можете проверить, на какой платформе вы сейчас работаете, и, если это macOS, добавьте к пути монтирования префикс /private
.
-v /private/var/folders/zz/...
?