
Ubuntu를 사용하면 USB 드라이브가 /media/<user>/<drive>
연결될 때 자동으로 마운트됩니다. 이를 사용하여 실행 중인 Docker 컨테이너에서 새로 연결된 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