0

我在 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 设备。我错过了什么?

4

1 回答 1

0

默认情况下,Docker 放弃了许多特权,包括访问大多数设备的能力。--device您可以使用标志显式授予对设备的访问权限,如下所示:

docker run --device /dev/vfio/35 ...

或者,您可以要求 Docker 不要放弃任何特权:

docker run --privileged ...

您会注意到,在上述两个示例中,都没有必要显式地 bind-mount /dev;在第一种情况下,您暴露的设备--device将显示出来,在第二种情况下,您会/dev默认看到主机的设备。

于 2022-01-25T01:18:43.293 回答