
/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