【发布时间】:2019-03-24 12:29:20
【问题描述】:
我想在 docker 容器中使用 XFS 文件系统配额来限制某些目录的大小。我已经将 quotactl 放在了 seccomp 白名单中(我完全知道这不安全),但现在我得到一个 no such file or directory 错误。
XFS 文件系统只能通过绑定挂载访问,因此我尝试使用主机和容器中的存储设备进行系统调用(例如 /dev/sda2 和 /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)
【问题讨论】:
-
/dev/sda5是否存在于容器中? -
这就是我忘记检查的内容,我对 docker 很陌生。我以为它确实在那里,因为像 df 这样的程序告诉我。谢谢
-
现在我通过使用 --device 和 docker run 解决了这个问题,但现在我收到“不允许操作”错误。是否也可以解决这个问题?
-
我认为对于
qoutactl,您只需要root,找不到它需要的任何功能。在 docker 中会很难...,尝试使用--privileged运行或授予`--cap-add SYS_ADMIN` -
刚刚在 Linux 源码中找到了原因:elixir.bootlin.com/linux/latest/source/fs/quota/quota.c#L43 --privileged 成功了。
标签: linux docker system-calls