要使用SGX飞地,应用程序必须与通过主机上的/dev/isgx
公开的SGX驱动程序进行通信。我们使用/dev/isgx
命令行选项在内部映射--device
的Docker容器内执行此类应用程序。
是否可以选择将设备(在这种情况下为/dev/isgx
)添加到由docker引擎启动的任何容器中?
修改
到目前为止我的进步:
Docker使用containerd
& runc
在启动容器配置之前创建容器配置。 Docker's configuration file /etc/docker/daemon.json
有一个字段runtimes
,其中一个字段可以为runc
提供任意参数:
[...]
"runtimes": {
"runc": {
"path": "runc"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
},
[...]
可悲的是,它的接缝runc
并没有消耗许多有用的参数(runc --help
和runc spec --help
< - 创建配置。)
我在DefaultSimpleDevices
的代码库中找到了有关DefaultAllowedDevices
和runc
的有趣source code。对该文件的最后一次提交说“不要默认创建/ dev / fuse”这很有希望,但是会涉及构建我自己的runc
。我希望通过配置选项获得通用解决方案。
答案 0 :(得分:2)
<强>更新强>
这不是正确答案。事实证明,该docker的默认父cgroup已经具有开放devices
权限:
/# cat /sys/fs/cgroup/devices/docker/devices.list
a *:* rwm
创建容器后,将使用更严格的devices
规则创建该容器的新cgroup。
原始回答
我认为您可以使用cgroup来实现您想要的效果。
您可以在主机上创建一个新的cgroup,允许访问/dev/isgx
并使用--cgroup-parent=<my-cgroup-name>
启动docker守护程序。
您还可以在cgroup-parent
中设置/etc/docker/daemon.json
选项。
如果您以前从未使用过cgroup,那么设置它可能并不简单。
如何创建新的cgroup取决于您的主机系统,但您必须使用devices
控制器将cgroup的特定设备列入白名单。
例如,一种方法是使用libcgroup
's /etc/cgconfig.conf
并以下列方式为cgroup dockerdaemon
提供对块设备的读/写访问权限:
group dockerdaemon {
devices {
devices.allow = b <device-major>:<device-minor> rw
}
}
以下是有关如何找出块设备的主要/次要的一个示例:
sudo udevadm info -n /dev/isgx
以下是一些其他链接,可能会让您更深入地了解整个cgroup主题:
答案 1 :(得分:0)
您的import json
with open("file.json") as f:
z = json.load(f)
print(z)
文件中需要类似的内容(或与其他基于Docker的技术类似的东西:
docker-compose.yaml