在 Docker 容器中使用自動安裝的 USB 隨身碟

在 Docker 容器中使用自動安裝的 USB 隨身碟

/media/<user>/<drive>在 Ubuntu 中,USB 磁碟機在插入時會自動安裝。所以我習慣-v /media/<user>:/media/<user>將USB掛載點的整個父目錄掛載到容器中。

如果已連接 USB 驅動器,則效果很好容器啟動。在這種情況下,USB 掛載點具有權限0777且屬於<user>.如果在容器啟動時連接了 USB 驅動器已經運行,掛載點出現在容器中,但具有權限0700並且由root

誰能解釋一下這裡可能發生的事情嗎?我可以想像,預設情況下,USB 驅動器會自動安裝為0700屬於root,然後一些其他機制會啟動,將其變更為0777<user>。只是 Docker 沒有接收到更改。這是真的?

我已經挖掘了大量的論壇主題和郵件列表,但無法弄清楚其中的機制。我還嘗試了一些 udev 規則(例如這個)但這些沒有效果。

答案1

我知道這個問題是從 2018 年開始的,但解決方案是使用綁定安裝並將“綁定傳播”設置為“共享”(不適用於卷)。

代替:

-v /media/<user>:/media/<user>

使用:

--mount type=bind,source=/media/<user>,target=/media/<user>,bind-propagation=shared

有關綁定傳播的更多資訊:https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation

答案2

rshared原始掛載的子掛載會暴露給副本掛載,並且副本掛載的子掛載也會傳播到原始掛載。但傳播也會擴展到嵌套在任何原始或副本安裝點內的安裝點。

docker run -v /media/$(whoami):/storage:rshared -it ubuntu bash

有關自動安裝的更多資訊:

https://github.com/moby/moby/issues/32512
https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation

相關內容