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

自定义镜像的GitHub Actions自托管运行器异常问题排查

问题原因及解决办法

核心疑问解答

GitHub Actions 自托管 runner(通过 ARC 部署)是否使用 Docker-in-Docker(DinD),完全取决于你的 ARC Helm 配置:

  • 默认情况下,ARC runner 会直接在 runner Pod 的主容器内执行 Job 步骤,此时步骤的运行环境就是你自定义的镜像环境。
  • 若开启了 dockerEnabled: true 等 DinD 相关配置,runner 会启动内置 Docker 守护进程,Job 步骤会在临时创建的独立容器中运行,此时步骤使用的是默认镜像(或你在 Action 中指定的容器镜像),而非 runner Pod 的镜像。

排查与解决步骤

1. 检查 ARC Helm 配置

查看你的 Helm values 是否启用了 DinD:

  • 若设置了 dockerEnabled: true,这就是问题根源:步骤在 DinD 容器中运行,无法访问 runner 镜像内的工具。
    • 解决选项 1:关闭 DinD,将 dockerEnabled 设为 false,重新部署 runner。此时步骤会直接在你的自定义镜像中执行,工具可正常访问。
    • 解决选项 2:保留 DinD(若需在 Job 中运行 Docker 命令),在 Action 的 Job 中显式指定你的自定义镜像:
      jobs:
        deploy_service:
          name: Deploy service
          runs-on: self-hosted
          container: MyNewImage:latest  # 指定自定义镜像
          permissions:
            id-token: write
            contents: write
      
          steps:
            - name: node check
              shell: bash
              run: node --version
      

2. 检查自定义镜像的环境配置

即使未启用 DinD,也可能因镜像本身的配置问题导致工具无法被 runner 用户访问:

  • 确保安装的工具路径已添加到全局 PATH,在 Dockerfile 中添加:
    ENV PATH="/your/tool/install/path:${PATH}"
    
  • 切换到 runner 用户验证工具是否可用:进入 Pod 后执行 su - runner,再运行 node --version 或 pulumi version。若此时找不到工具,需调整工具的安装权限(如执行 chmod +x 或确保目录对 runner 用户可读可执行)。

3. 验证 runner 执行上下文

确认 runner 进程是否以 runner 用户运行:进入 Pod 后执行 ps aux | grep runner,若进程用户不是 runner,需在 Dockerfile 中调整用户配置(ARC 默认使用 runner 用户执行步骤)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:05:05