【发布时间】:2018-08-06 08:12:00
【问题描述】:
我有一个使用插件接口的 Qt 项目,可以在我的系统上正常编译。但是,当在 docker 中编译同一个项目时,它会停止使用 Qt 5.10.1,并给出消息Error: Undefined interface。在strace 运行moc 之后,发现没有找到定义接口的头文件,因为对包含文件路径的statx 调用总是返回EPERM。文档甚至没有提到这个错误是如何产生的。
docker run --privileged 解决了这个问题,但我想避免过多的权限,所以我只想设置必要的权限。
到目前为止,我尝试添加所有这些功能(甚至同时添加)但没有成功:
- CAP_DAC_OVERRIDE
- CAP_DAC_READ_SEARCH
- CAP_FOWNER
- CAP_SETFCAP
我错过了什么吗?
更新
pull request 待处理。
【问题讨论】:
-
同一个容器内,同样的配置,能不能通过其他方式访问同一个文件?也就是说,您是否确认该问题是特定于
statx的? -
如果它是特定于
statx-- 你从docker info | grep 'Security Options'的输出是什么? -
@CharlesDuffy 我可以
cat容器内的文件内容没有问题。docker info的输出是Security Options: seccomp Profile: default。 -
我猜 Docker 正在使用不允许
statx的 seccomp 配置文件,但这与空白的“安全选项”列表不一致......除非它被重新格式化为多行。 -
@CharlesDuffy 是的,它被重新格式化为多行。我把它折叠成一个用于编辑的评论。
标签: linux docker linux-capabilities