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
:
$ 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
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:
Standardmäßig können Sie Dateien in gemeinsam nutzen /Users/
, /Volumes/
, /private/
, und /tmp
direkt. Verwenden Sie zum Hinzufügen oder Entfernen von Verzeichnisbäumen, die nach Docker exportiert werden, die Registerkarte Dateifreigabe im Walmenü der Docker-Einstellungen -> Einstellungen -> Dateifreigabe. (Siehe Einstellungen.)
Alle anderen Pfade, die in -v
Bindungs-Mounts verwendet werden, stammen von der Moby Linux-VM, auf der die Docker-Container ausgeführt werden. Daher-v /var/run/docker.sock:/var/run/docker.sock
sollten Argumente wie erwartet funktionieren. Wenn ein macOS-Pfad nicht freigegeben ist und in der VM nicht vorhanden ist, schlägt der Versuch, den Mount zu binden, fehl, anstatt ihn in der VM zu erstellen. Pfade, die bereits in der VM vorhanden sind und Dateien enthalten, werden von Docker reserviert und können nicht aus macOS exportiert werden.
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
.
-v /private/var/folders/zz/...
?