OKD4用ConfigMap挂载php.ini报configMap volumes不允许使用如何解决
问题原因
你遇到的报错全部由OKD的安全上下文约束(SCC,Security Context Constraint) 机制拦截触发,和你配置的SecurityContext直接相关,同时还有一处隐性的挂载配置错误:
- UID范围不合法:OKD默认会为每个命名空间分配独立的UID运行范围,从报错可以看到你当前项目允许的UID范围是
[1002460000, 1002469999],你硬编码的runAsUser: 1000、fsGroup: 1000不在允许范围内,直接触发SCC校验失败。 - ConfigMap卷权限不足:你当前Pod能匹配到的SCC没有开放ConfigMap类型存储卷的使用权限,所以挂载操作被禁止。绝大多数场景下这个报错是前面UID配置错误导致无法匹配到默认的restricted SCC(默认允许使用ConfigMap卷)引发的连锁问题。
- 隐性配置错误:你写的
volumeMounts.mountPath为相对路径php.ini,就算SCC校验通过,也无法挂载到你期望的/etc/php.ini路径。
修复方案
- 优先修复UID配置问题:如果你的镜像没有强制要求固定UID运行,直接删除Deployment中
securityContext下的runAsUser、fsGroup配置即可,OKD会自动使用项目分配的合法UID启动容器。如果镜像必须使用UID 1000运行,执行以下命令给项目的默认服务账号绑定允许任意UID的SCC:oc adm policy add-scc-to-user anyuid -z default -n <你的项目命名空间名称> - 修正挂载配置:修改
volumeMounts配置为如下内容,指定绝对路径的同时添加subPath避免覆盖整个/etc目录:volumeMounts: - name: config-volume mountPath: /etc/php.ini subPath: php.ini
完成以上修改后重新创建Deployment即可正常挂载ConfigMap。
内容的提问来源于stack exchange,提问作者DrunkCoder
相关产品推荐
相关产品推荐

