You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenShift 4.11中运行无特权Rootless Podman?

在OpenShift 4.11中解决Rootless Podman构建时无法创建/.local目录的问题

核心原因

OpenShift的安全上下文约束(SCC)与用户ID映射机制和普通虚拟机环境存在差异:podman用户在容器内没有根目录写入权限,但Rootless Podman默认会尝试在/.local路径存储运行状态,最终触发权限不足报错。

解决方案步骤

1. 调整Podman容器的存储路径与用户ID

运行Podman容器时,显式指定存储目录到OpenShift允许写入的路径(如/tmp),同时匹配你已配置的UID范围:

podman run -u 1001:1001 \
  -v /tmp/podman-storage:/tmp/.local/share/containers \
  quay.io/podman/stable \
  sh -c "echo 'FROM busybox' > /tmp/Dockerfile && echo 'RUN echo hello' >> /tmp/Dockerfile && podman build --root /tmp/.local/share/containers -t test /tmp/."
  • -u 1001:1001:指定与命名空间补丁匹配的UID/GID
  • -v /tmp/podman-storage:/tmp/.local/share/containers:将Podman存储目录挂载到容器内可写的/tmp路径
  • --root /tmp/.local/share/containers:强制Podman使用指定存储根目录,规避默认写入/.local的行为

2. 补充SCC权限配置

除已有的UID/GID范围补丁,需给命名空间内的服务账号添加对应SCC权限:

oc adm policy add-scc-to-group anyuid system:serviceaccounts:gitlab-dev

若需更精细的权限控制,可创建自定义SCC:

apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: podman-rootless-scc
allowPrivilegeEscalation: false
allowedCapabilities: []
fsGroup:
  type: MustRunAs
  ranges:
  - min: 1001
    max: 101000
runAsUser:
  type: MustRunAsRange
  uidRangeMin: 1001
  uidRangeMax: 101000
seLinuxContext:
  type: MustRunAs
supplementalGroups:
  type: MustRunAs
  ranges:
  - min: 1001
    max: 101000
volumes:
- configMap
- emptyDir
- projected
- secret
- downwardAPI
- persistentVolumeClaim

绑定到服务账号:

oc create -f podman-rootless-scc.yaml
oc adm policy add-scc-to-group podman-rootless-scc system:serviceaccounts:gitlab-dev

3. 推荐:使用OpenShift原生BuildConfig替代Podman构建

如果无需在容器内运行Podman,更符合OpenShift最佳实践的方式是用BuildConfig完成镜像构建:

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: test-build
  namespace: gitlab-dev
spec:
  source:
    dockerfile: |
      FROM busybox
      RUN echo hello
  strategy:
    dockerStrategy: {}
  output:
    to:
      kind: ImageStreamTag
      name: test:latest

触发构建:

oc start-build test-build

该方式完全依托OpenShift原生构建机制,从根源规避Rootless Podman的权限适配问题。

验证

执行上述步骤后,重新运行构建命令,检查是否成功生成镜像且无权限报错。

内容的提问来源于stack exchange,提问作者uniwinux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:40:42