LXC 容器的 USB 直通

LXC 容器的 USB 直通

問題:

因此,我一直在嘗試讓 USB 裝置(primesense - Kinect 的 OEM 參考)傳遞到 LXC 容器,這樣我就可以進行開發,而不必擔心實驗庫污染我的穩定係統。

我認為我已經完成了所有必要的操作,但是容器內運行的應用程式無法存取該裝置。

我使用帶有 LXC 1.0.0 的 Ubuntu 12.04 x64 主機,容器是從 12.04 模板建立的。 (我在askubuntu上很活躍,但我相信這個問題更適合這裡)

問題:

如何透過 USB 傳遞到(特權)LXC 容器。

所採取的行動:

我的主機的 udev 規則和容器的 udev 規則是相同的

SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27",
MODE:="0666", OWNER:="root", GROUP:="video"

在主機上,設備節點可見為:

$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 15:27 /dev/bus/usb/001/015

在容器中,設備節點可見為:

$ ls -l /dev/bus/usb/001/015 
crw-rw-rw- 1 root video 189, 14 Jun 18 22:07 /dev/bus/usb/001/015

另外,我已經通過了

sudo lxc-cgroup  --n CN1 devices.allow "c 189:* rwm"

為了將 lxc 的 USB 裝置列入白名單

不幸的是,當我嘗試在主機上運行應用程式時,設備被識別並按預期工作。在容器中運行相同的應用程式(具有相同的相關庫)會導致應用程式無法找到設備,即使我明確傳遞 URI 也是如此。

我正在嘗試將問題範圍縮小到庫錯誤(我可以修復,但我還不想提交這個兔子洞)或我缺少 LXC 容器權限的問題。

答案1

新增白名單規則lxc-cgroup並不是持久性的,在測試我的 LXC 容器時,我在某個時刻重置了容器,並且沒有重新添加規則。即使沒有lxc白名單(預設的 lxc 規則) ,設備節點也會在容器中正確創建,c *:* m但 lxc 容器在嘗試使用設備時會被拒絕訪問該設備,如果沒有正確的 cgroup 權限,它將無法工作

解決方法是添加

  lxc.cgroup.devices.allow = c 189:* rwm

lxc.conf與您的系統相關的。

相關內容