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