我想在docker容器内使用XFS文件系统配额来限制某些目录的大小。我已经将quotactl放入seccomp白名单中(我完全意识到这是不安全的),但是现在我没有出现这样的文件或目录错误。
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)
答案 0 :(得分:1)
在评论的帮助下,我能够解决此问题,需要做三件事才能在Docker容器内使用quotactl
:
quotactl
系统调用列入白名单--device=/dev/sdXX:/dev/sdXX
将设备添加到容器中--privileged
在特权模式下运行容器