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

OpenShift构建报错:非零(13)退出码,寻求解决方案

解决OpenShift S2I构建.NET Core应用时的权限错误问题

我来帮你分析下这个问题:你遇到的是S2I构建过程中非root用户权限不足的问题,构建镜像(registry.access.redhat.com/dotnet/dotnet-20-rhel7)试图修改/opt/app-root/src目录下的文件(比如.gitconfig、username、password这些)的组和权限,但因为OpenShift默认以非root用户运行构建流程,导致操作被拒绝,最终构建失败(退出码13)。

下面是几个针对性的解决方案:

  • 排除敏感/不必要的文件出现在构建上下文
    你看到的.gitconfig、username、password这些文件属于本地git配置或凭证,完全不应该被包含在代码仓库或构建上下文里。请把这些文件添加到项目根目录的.gitignore文件中,避免它们被传入S2I构建环境:

    # .gitignore 新增内容
    .gitconfig
    username
    password
    

    这样构建流程就不会试图处理这些不属于应用代码的文件,从根源上避免权限问题。

  • 升级到较新的.NET Core S2I镜像
    你当前使用的dotnet-20-rhel7是非常老旧的版本(.NET Core 2.0早已停止支持),新版本的Red Hat .NET Core镜像(比如dotnet-60-rhel8或更高版本)已经优化了构建流程中的权限处理,默认会以更友好的方式处理文件权限,大概率能解决这类问题。

  • 调整构建的安全上下文(谨慎操作)
    如果确实需要在构建过程中修改文件权限,可以给OpenShift的builder服务账号赋予anyuid安全上下文约束(SCC),允许构建过程以root用户运行:

    oc adm policy add-scc-to-user anyuid -z builder
    

    注意:这个操作会提升builder账号的权限,仅限测试或非生产环境使用,生产环境建议优先用前两种方案。

  • 自定义S2I构建脚本跳过权限修改
    你可以在项目根目录创建.s2i/bin/assemble自定义脚本,覆盖原镜像的默认assemble流程,跳过那些会触发权限错误的chgrp/chmod操作。脚本示例:

    #!/bin/bash
    # 跳过原镜像中修改文件组和权限的步骤,直接执行.NET构建
    dotnet restore
    dotnet publish -c Release -o ./publish
    

    记得给这个脚本添加可执行权限:chmod +x .s2i/bin/assemble,然后提交到代码仓库。

内容的提问来源于stack exchange,提问作者Prasanna K Rao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:25