Команда docker run -v /var/folders/zz/...
выдает следующую ошибку.
docker: Error response from daemon: Mounts denied:
The paths /var/folders/zz/... and /var/folders/zz/...
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
Когда я открываю общий доступ к файлам, я вижу, что / private уже указан.
Если я попытаюсь добавить /var/folder/
, он разрешится /private/var/folders
, что является подмножеством / private, и, следовательно, добавление отклоняется.
Подводя итог, мне кажется, что каталог /var/folders/..
используется OS X как подкаталог /private
и, следовательно, должен быть известен Docker. Любая помощь в решении этой проблемы будет оценена.
В качестве эксперимента я заменил /private
в File Sharing на /private/var/folders
и перезапустил докер, но результат не изменился.
Просто для более полной справки, это сценарий .sh , который запускает этот сценарий python , который, в свою очередь, запускает команду docker.
-v /private/var/folders/zz/...
?WORKING_DIR="$(mktemp -d)
и-v ${WORKING_DIR}
. Но взломWORKING_DIR="/private"$(mktemp -d)
, похоже, решает проблему. Большое спасибо :)Ответы:
Монтирование томов Docker для Mac отличается от базовой системы Docker. В основном это связано с тем, что Docker пытается соответствовать рекомендациям Apple по песочнице файловой системы.
Как показано в настройках Docker, macOS экспортирует только определенные пути.
/Users
/Volumes
/tmp
/private
/var
в macOS - это символическая ссылка на/private
. Это также верно для/tmp
:Почему
/tmp
отображается в панели общего доступа, но/var
нет (хотя оба являются ее частью/private
)? В документации Docker для Mac о пространствах имен файловой системы объясняется:Обратите внимание, что
/var/run
это специально упомянуто здесь как место, которое будет монтироваться из виртуальной машины Linux, а не из macOS.Когда вы запрашиваете монтирование тома, сначала проверяется экспорт файловой системы macOS. Если совпадений нет, следующей проверяется виртуальная машина Linux, на которой запущен Docker. Если ни один из них не имеет запрошенного вами пути, то монтирование не выполняется.
В вашем случае
/var
не экспортируется macOS./var
существует в виртуальной машине Linux, но/var/folders
не существует. Следовательно, путь недоступен, и монтирование не выполняется.Если вы измените путь на
/private/var
, то это будет успешно, потому что macOS экспортирует все/private
дерево файловой системы для монтирования.Чтобы сделать вещи более портативными, вы можете проверить, на какой платформе вы сейчас работаете, и, если это macOS, добавьте к пути монтирования префикс
/private
.источник
mac-path:container-path
и/private
будет существовать только на стороне Mac./private/etc/localtime
для mac os,/etc/localtime
для ubuntu. Как сообщить системную информацию в Docker-compose.yml? Спасибо!В качестве альтернативного решения:
Измените путь с
/private/instance1-data:/home
на./instance1-data:/home
В области * nix и, следовательно, в Docker,
.
указывает текущий каталог. Поскольку macOS разборчива и становится еще разборчивее в отношении песочницы, это кажется жизнеспособным решением для macOS. Просто создайте нужную папкуinstance1
в том же каталоге.Еще одно преимущество этого решения в том, что оно устраняет необходимость работать
docker-compose
сsudo
. Тем не менее, в данном случае это не причиняет вреда, но все же это плюс.источник
Например, при использовании Portainer у меня работает эта команда:
Но, если я
-v /var:/data
вообще изменю, это не сработает. Я думаю (но не уверен), что это потому, что Docker пытается выполнить mkdir. Итак, если я попытаюсь смонтировать-v /var/whatever:/data
, mkdir завершится неудачно, потому что недостаточно прав, и он не работает.У меня 2 Mac (High Sierra), и я пробовал на обоих. Та же проблема. Также я пробовал использовать канал Docker Beta. Думаю, я понимаю ответ Дэна Лоу: я обновлю этот ответ, если это сработает для меня.
источник
У меня была аналогичная проблема, когда я создал каталог
/var/tmp
на моем Mac, который я хотел смонтировать в своем контейнере докеров.Решил это, добавив путь к каталогу к файлу следующим образом:
Теперь я мог видеть каталог
/var/tmp
в Docker-> preference-> resources-> file sharing. Затем перезапустил докер.Затем это решило мою проблему с установкой.
источник
Моя проблема исправлена, когда я удалил путь к проекту из общего доступа к файлам в настройках докера и перезапустил докер, а затем снова добавил путь к файлу проекта.
источник
Моя проблема исправлена так же, как и у Аргьи. Мне просто нужно было удалить пути из общего доступа к файлам и перезапустить докер.
источник