Der Befehl docker run -v /var/folders/zz/...
erzeugt den folgenden Fehler.
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.
Wenn ich die Dateifreigabe öffne, wird / private bereits aufgelistet.
Wenn ich versuche hinzuzufügen /var/folder/
, wird es in aufgelöst /private/var/folders
, was eine Teilmenge von / private ist, und daher wird das Hinzufügen abgelehnt.
Zusammenfassend sieht es für mich so aus, als würde das Verzeichnis /var/folders/..
von OS X als Unterverzeichnis von /private
Docker gemeinsam genutzt und muss daher Docker bekannt sein. Jede Hilfe bei der Lösung dieses Problems wäre dankbar.
Als Experiment habe ich das Docker /private
in File Sharing durch ersetzt /private/var/folders
und neu gestartet, aber das Ergebnis hat sich nicht geändert.
Nur für eine vollständigere Referenz ist dies das .sh-Skript , das dieses Python-Skript ausführt , das wiederum den Docker-Befehl ausführt.
quelle
-v /private/var/folders/zz/...
?WORKING_DIR="$(mktemp -d)
und ging-v ${WORKING_DIR}
. Aber das zu hackenWORKING_DIR="/private"$(mktemp -d)
, scheint das Problem zu lösen. Vielen Dank :)Antworten:
Docker für Mac- Volume-Mounts verhalten sich anders als das Basis-Docker-System. Dies liegt hauptsächlich daran, dass Docker versucht, die Sandbox-Richtlinien für das Dateisystem von Apple einzuhalten.
Wie in den Docker-Einstellungen gezeigt, werden nur bestimmte Pfade von macOS exportiert.
/Users
/Volumes
/tmp
/private
/var
in macOS ist eine symbolische Verknüpfung in/private
. Das gilt auch für/tmp
:Warum wird
/tmp
es im Freigabebereich aufgeführt, aber/var
nicht (obwohl beide Teil davon sind/private
)? In der Dokumentation zu Docker für Mac zu Dateisystem-Namespaces wird Folgendes erläutert:Beachten Sie, dass dies
/var/run
hier ausdrücklich als Ort erwähnt wird, der von der Linux-VM anstelle von macOS bereitgestellt wird.Wenn Sie nach einem Volume-Mount fragen, werden zuerst die Exporte des macOS-Dateisystems überprüft. Wenn dort keine Übereinstimmung vorliegt, wird als Nächstes die Linux-VM überprüft, auf der Docker ausgeführt wird. Wenn keiner von ihnen den von Ihnen angeforderten Pfad hat, schlägt die Bereitstellung fehl.
In Ihrem Fall
/var
wird nicht von macOS exportiert./var
existiert in der Linux-VM, ist es aber/var/folders
nicht. Daher ist der Pfad nicht verfügbar und die Bereitstellung schlägt fehl.Wenn Sie den Pfad in ändern
/private/var
, ist dies erfolgreich, da macOS den gesamten/private
Dateisystembaum zum Mounten exportiert .Um die Portabilität zu verbessern, möchten Sie möglicherweise testen, auf welcher Plattform Sie gerade arbeiten. Wenn es sich um MacOS handelt, müssen Sie dem Mount-Pfad das Präfix voranstellen
/private
.quelle
mac-path:container-path
und/private
würde nur auf der Mac-Seite existieren./private/etc/localtime
für Mac OS,/etc/localtime
für Ubuntu. Wie kann man die Systeminformationen in Docker-compose.yml mitteilen? Danke dir!Als alternative Lösung:
Ändern Sie den Pfad von
/private/instance1-data:/home
nach./instance1-data:/home
Im * nix-Land und damit in Docker
.
gibt das das aktuelle Verzeichnis an. Da macOS beim Sandboxen immer wählerischer wird, scheint dies eine praktikable Lösung für macOS zu sein. Erstellen Sie einfach den gewünschten Ordnerinstance1
im selben Verzeichnis.Ein weiterer Vorteil dieser Lösung besteht darin, dass sie nicht mehr ausgeführt
docker-compose
werden musssudo
. Unabhängig davon verursacht es in diesem Fall keinen Schaden, aber dennoch ist das ein Plus.quelle
Mit Portainer funktioniert dieser Befehl beispielsweise für mich:
Aber wenn ich das
-v /var:/data
überhaupt ändere, wird es nicht funktionieren. Ich denke (aber nicht sicher), dass es daran liegt, dass Docker versucht, ein mkdir zu machen. Wenn ich also versuche zu mounten-v /var/whatever:/data
, schlägt mkdir fehl, weil nicht genügend Berechtigungen vorhanden sind und es nicht funktioniert.Ich habe 2 Macs (High Sierra) und habe es auf beiden ausprobiert. Gleiches Problem. Außerdem habe ich versucht, den Docker Beta-Kanal zu verwenden. Ich glaube, ich verstehe die Antwort von Dan Lowe: Ich werde diese Antwort aktualisieren, wenn das für mich funktioniert.
quelle
Ich hatte ein ähnliches Problem, als ich
/var/tmp
auf meinem Mac ein Verzeichnis erstellt hatte, das ich in meinen Docker-Container einbinden wollte.Es wurde behoben, indem der Verzeichnispfad wie folgt zu einer Datei hinzugefügt wurde:
Jetzt konnte ich das Verzeichnis
/var/tmp
unter Docker-> Einstellungen-> Ressourcen-> Dateifreigabe sehen. Dann habe ich den Docker neu gestartet.Es löste dann mein Montageproblem.
quelle