
Bei Ubuntu werden USB-Laufwerke automatisch gemountet, /media/<user>/<drive>
wenn sie eingesteckt werden. Ich wollte dies nutzen, um neu angeschlossene USB-Laufwerke in einem laufenden Docker-Container verfügbar zu machen. Daher mountete ich -v /media/<user>:/media/<user>
das gesamte übergeordnete Verzeichnis der USB-Mount-Punkte in den Container.
Dies funktioniert gut, wenn das USB-Laufwerk angeschlossen warVorder Container startet. In diesem Fall hat der USB-Einhängepunkt Berechtigungen 0777
und gehört zu <user>
. Wenn ein USB-Laufwerk angeschlossen ist, während der Container gestartet wirdläuft bereits, der Einhängepunkt erscheint im Container, verfügt aber über Berechtigungen und ist stattdessen 0700
Eigentümer von !root
Kann jemand Licht ins Dunkel bringen, was hier möglicherweise passiert? Ich kann mir vorstellen, dass die USB-Laufwerke standardmäßig automatisch als 0700
zugehörig gemountet werden root
und danach ein anderer Mechanismus eingreift, um dies in 0777
und zu ändern <user>
. Nur wird die Änderung von Docker nicht übernommen. Stimmt das?
Ich habe bereits unzählige Forenbeiträge und Mailinglisten durchforstet, konnte den Mechanismus aber nicht herausfinden. Ich habe auch einige udev-Regeln ausprobiert (wieDieses hier), diese hatten jedoch keine Wirkung.
Antwort1
Ich weiß, dass die Frage aus dem Jahr 2018 stammt, aber eine Lösung wäre, Bind-Mounts zu verwenden und die „Bind-Ausbreitung“ auf „Shared“ zu setzen (für Volumes nicht verfügbar).
Anstatt:
-v /media/<user>:/media/<user>
Verwenden:
--mount type=bind,source=/media/<user>,target=/media/<user>,bind-propagation=shared
Weitere Informationen zur Bind-Propagation:https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
Antwort2
rshared
Untermounts des ursprünglichen Mounts werden Replikat-Mounts zugänglich gemacht und Untermounts von Replikat-Mounts werden ebenfalls zum ursprünglichen Mount propagiert. Die Propagierung erstreckt sich jedoch auch zu und von Mount-Punkten, die in einem der ursprünglichen oder Replikat-Mount-Punkte verschachtelt sind.
docker run -v /media/$(whoami):/storage:rshared -it ubuntu bash
Weitere Informationen zur automatischen Bereitstellung:
https://github.com/moby/moby/issues/32512
https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation