Automatisch gemountete USB-Laufwerke im Docker-Container verwenden

Automatisch gemountete USB-Laufwerke im Docker-Container verwenden

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 0777und 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 0700Eigentü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 0700zugehörig gemountet werden rootund danach ein anderer Mechanismus eingreift, um dies in 0777und 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

rsharedUntermounts 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

verwandte Informationen