GitHub Actions自托管Windows runner执行Docker命令报访问拒绝如何解决?
问题根因
你本地测试Docker命令时使用的是登录Windows的个人用户账号,该账号已加入docker-users用户组、且已经完成Harbor仓库的身份认证,所以可以正常执行命令。而GitHub Actions自托管Runner默认以Local Service系统账号或者独立的Runner服务账号运行,两个账号的用户组权限、Docker认证配置相互独立,因此Runner运行时会出现权限不足或认证失败的访问拒绝错误。
修复步骤
- 确认Runner的运行身份
打开Windows服务管理器(运行命令services.msc),找到名称前缀为GitHub Actions Runner的对应服务,查看登录选项卡下配置的运行账号。如果你的Runner没有注册为Windows服务,是直接通过run.cmd前台启动的,记录启动进程时使用的Windows账号即可。 - 配置对应账号的Docker权限
两种方案二选一即可:- 将Runner服务的运行账号修改为你本地测试成功的用户账号,保存配置后重启Runner服务生效
- 为当前Runner的运行账号单独配置权限:
- 执行命令将账号加入Docker用户组:
net localgroup docker-users <你的Runner运行账号名> /add - 切换到Runner运行账号身份打开PowerShell,执行
docker login <你的Harbor仓库地址>,输入Harbor的用户名密码完成认证,认证信息会自动保存到该账号的配置路径下
- 执行命令将账号加入Docker用户组:
- (可选)工作流主动配置登录逻辑
为了避免账号切换后认证信息丢失的问题,建议将Harbor地址、用户名、访问令牌存入GitHub仓库的Secrets配置中,在工作流中主动执行登录操作,示例配置如下:steps: - name: 登录Harbor镜像仓库 run: docker login ${{ secrets.HARBOR_DOMAIN }} -u ${{ secrets.HARBOR_USER }} -p ${{ secrets.HARBOR_TOKEN }} - 重启验证
完成所有配置后重启GitHub Actions Runner服务,重新触发工作流即可验证修复效果。
内容的提问来源于stack exchange,提问作者Manju
相关产品推荐
相关产品推荐

