SLES15环境下Docker启动SUSE系列容器出现文件访问权限异常问题
问题根因
- 核心原因是Docker 18.09.6属于较旧版本,其默认的seccomp安全过滤规则未加入对
statx系统调用的放行配置。而SUSE 15及以上版本的基础镜像中,coreutils软件包的ls命令默认会调用statx接口获取文件元数据,调用被拦截后就会返回Operation not permitted错误,导致无法正常读取文件权限信息。 - Alpine、Ubuntu等其他发行版的对应版本coreutils仍在使用传统的
stat/fstat系统调用,不在旧版Docker的seccomp拦截列表中,因此运行无异常。
验证方法
你可以通过临时关闭seccomp限制启动容器验证是否是该原因:
docker run --rm -it --security-opt seccomp=unconfined opensuse/leap:15 ls -l /
如果关闭seccomp后ls命令返回正常,即可确认是该问题。
解决方案
- 方案1:升级Docker到19.03及以上版本,该版本开始默认的seccomp配置已经放行
statx系统调用,可原生兼容SUSE系容器。 - 方案2:如果无法升级Docker,启动SUSE容器时添加参数
--security-opt seccomp=unconfined临时关闭seccomp限制,或者自定义seccomp配置文件单独放行statx调用。 - 方案3:如果宿主机启用了AppArmor,也可同步添加启动参数
--security-opt apparmor=unconfined排除AppArmor策略的影响。
内容的提问来源于stack exchange,提问作者jnnks
相关产品推荐
相关产品推荐

