我在 BIOS 中啟用了虛擬化,并在內核命令列 (intel_iommu=on) 上啟用了 IOMMU。
我將 solarflare NIC 系結到 vfio-pci 設備并添加了 udev 規則以確保我的非 root 用戶可以訪問 vfio 設備(例如,/etc/udev/rules.d/10-vfio-docker-users.rules ):
SUBSYSTEM=="vfio", OWNER="myuser", GROUP=="myuser"
我已經啟動了我的容器-u 1000并映射了 /dev ( -v /dev:/dev)。在容器中的互動式 shell 中運行,我能夠驗證設備是否存在,并且具有我的 udev 規則設定的權限:
bash-4.2$ whoami
whoami: unknown uid 1000
bash-4.2$ ls -al /dev/vfio/35
crw-rw---- 1 1000 1000 236, 0 Jan 25 00:23 /dev/vfio/35
但是,如果我嘗試打開它(例如,python -c "open('/dev/vfio/35', 'rb')"我得到IOError: [Errno 1] Operation not permitted: '/dev/vfio/35'了 . 但是,相同的命令在容器外與用戶 ID 為 1000 的普通非 root 用戶一樣作業!
似乎有其他安全措施不允許我訪問容器內的 vfio 設備。我錯過了什么?
uj5u.com熱心網友回復:
默認情況下,Docker 放棄了許多特權,包括訪問大多數設備的能力。--device您可以使用標志顯式授予對設備的訪問權限,如下所示:
docker run --device /dev/vfio/35 ...
或者,您可以要求 Docker 不要放棄任何特權:
docker run --privileged ...
您會注意到,在上述兩個示例中,都沒有必要顯式地 bind-mount /dev;在第一種情況下,您暴露的設備--device將顯示出來,在第二種情況下,您會/dev默認看到主機的設備。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/421320.html
標籤:
上一篇:跨域
