自定义镜像的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
- 解决选项 1:关闭 DinD,将
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
相关产品推荐
相关产品推荐

