linux - 在 docker 容器中使用 quotactl 系统调用
问题描述
我想在 docker 容器中使用 XFS 文件系统配额来限制某些目录的大小。我已经将 quotactl 放在了 seccomp 白名单中(我完全知道这不安全),但现在我得到一个 no such file or directory 错误。
XFS 文件系统只能通过绑定挂载访问,因此我尝试使用主机和容器中的存储设备进行系统调用(例如/dev/sda2
and /dev/sda5
),但它们都不起作用。完全相同的程序在主机系统上运行良好。
编辑:这是 strace 告诉我的:
# On host system
quotactl(QCMD(Q_XSETQLIM, PRJQUOTA), "/dev/sda5", 0, {d_version=1, d_flags=XFS_PROJ_QUOTA, d_fieldmask=0x8, d_id=0, d_blk_hardlimit=20480, d_blk_softlimit=0, d_ino_hardlimit=0, d_ino_softlimit=0, d_bcount=0, d_icount=0, d_itimer=0, d_btimer=0, d_iwarns=0, d_bwarns=0, d_rtb_hardlimit=0, d_rtb_softlimit=0, d_rtbcount=0, d_rtbtimer=0, d_rtbwarns=0}) = 0
# Inside container
quotactl(QCMD(Q_XSETQLIM, PRJQUOTA), "/dev/sda5", 0, {d_version=1, d_flags=XFS_PROJ_QUOTA, d_fieldmask=0x8, d_id=0, d_blk_hardlimit=20480, d_blk_softlimit=0, d_ino_hardlimit=0, d_ino_softlimit=0, d_bcount=0, d_icount=0, d_itimer=0, d_btimer=0, d_iwarns=0, d_bwarns=0, d_rtb_hardlimit=0, d_rtb_softlimit=0, d_rtbcount=0, d_rtbtimer=0, d_rtbwarns=0}) = -1 ENOENT (No such file or directory)
解决方案
在评论的帮助下,我能够解决这个问题,您需要做三件事才能在quotactl
docker 容器中使用:
- 对容器使用您自己的 seccomp 配置并将
quotactl
系统调用列入白名单 - 使用命令行选项将设备添加到容器
--device=/dev/sdXX:/dev/sdXX
- 以特权模式运行容器
--privileged
推荐阅读
- matplotlib - Seaborn Heatmap:分别调整垂直和水平线的线宽
- javascript - Joi:如何仅验证两个键中的一个(带数组)?
- python - 将 python 2.7 转换为 python 3.8
- arrays - 为什么复杂度为 O(n)?
- angular - ngx daterangepicker 材料不起作用
- momentjs - Moment.js:当前日期的年初不是UTC以外的其他时区的预期
- ios - WKWebView 没有在模拟器上加载网页
- google-apps-script - Gmail / gsuite 插件 - 在邮箱打开时自动打开
- c# - 我们如何从 PDF 文件中提取关系和结构数据,其中包含元数据和控件与其标签的关系
- curl - 如何通过 Autodesk Forge 上的数据管理 API 上传超过 100MB 的大文件?