解决gitlab|解决gitlab runner在docker模式下报 503 Service Unavailable 错误
gitlab runner安装并注册好后,在第一次启动时报无法拉取gitlab-runner-helper
错误:
Running with gitlab-runner 15.3.0 (bbcb5aba)
on debian-docker CHvjghoP
feature flags: FF_USE_FASTZIP:true
Preparing the "docker" executor
00:02
Using Docker executor with image ruby:3.0 ...
Pulling docker image registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba ...
WARNING: Failed to pull image with policy "always": Error response from daemon: Head "https://registry.gitlab.com/v2/gitlab-org/gitlab-runner/gitlab-runner-helper/manifests/x86_64-bbcb5aba": received unexpected HTTP status: 503 Service Unavailable (manager.go:235:1s)
ERROR: Job failed: failed to pull image "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba" with specified policies [always]: Error response from daemon: Head "https://registry.gitlab.com/v2/gitlab-org/gitlab-runner/gitlab-runner-helper/manifests/x86_64-bbcb5aba": received unexpected HTTP status: 503 Service Unavailable (manager.go:235:1s)
分析错误信息发现runner首先想拉取一个
registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba
镜像,该镜像的作用应该是加速下载速度、安全链接、设置环境变量以及添加附件的软件等,由于默认的helper镜像位于gitlab的官方docker仓库中,而在接取此仓库时发生了503错误。解决方案
gitlab runner需要一个helper,这是必须的。而当前的问题是:这个
registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-bbcb5aba
发生了503(可能是由于认证引起的)。所以我们要做的是:重新为gitlab runner指定一个不需要权限认证的gitlab-runner-helper,幸运的是docker官方提供了这个image.
重新设置helper
我们打来gitlab runner所在服务器,登录后先查看自己的gitlab runner版本:
root@debian-docker:/etc/gitlab-runner# gitlab-runner -v
Version:15.3.0
Git revision: bbcb5aba
Git branch:15-3-stable
GO version:go1.17.9
Built:2022-08-19T22:41:11+0000
OS/Arch:linux/amd64
然后找到配置文件
config.toml
:- 当以root用户在*nix系统上运行Gitlab Runner时,路径在
/etc/gitlab-runner/
- 当以及非root用户在*nix系统上运行Gitlab Runner时,路径在
~/.gitlab-runner/
- 其它的系统,在
./
[runners.docker]
...
helper_image="gitlab/gitlab-runner-helper:x86_64-${CI_RUNNER_VERSION}"
GitLab Runner 版本小于13.2的,加入以下信息:
[runners.docker]
...
helper_image="gitlab/gitlab-runner-helper:x86_64-${CI_RUNNER_REVISION}"
配置变更后,重新跑Job,再次查看日志,发现以下错误:
ERROR: Job failed: failed to pull image "gitlab/gitlab-runner-helper:x86_64-15.3.0" with specified policies [always]: Error response from daemon: manifest for gitlab/gitlab-runner-helper:x86_64-15.3.0 not found: manifest unknown: manifest unknown (manager.go:235:3s)
此时已经不再是504错误了,而且请求的image地址也变成了我们配置的
itlab/gitlab-runner-helper:x86_64-15.3.0
,说明刚刚的配置生效了。但是很遗憾docker hub上并不存在x86_64-15.3.0
版本:
文章图片
即然这样,那我想用下最新的版本应该问题不大吧,当前最新的版本是
x86_64-v14.10.2
所以我再次修改配置文件
config.toml
,把helper的版本改成x86_64-v14.10.2
[runners.docker]
...
helper_image="gitlab/gitlab-runner-helper:x86_64-v14.10.2"
重新运行job,拉取成功的画面来了:

文章图片
总结 【解决gitlab|解决gitlab runner在docker模式下报 503 Service Unavailable 错误】此错误在google上搜索并没有找到傻瓜式的答案,所以解决问题的方向还是要由报错信息及原理上猜想。由官方文档或许到helper是必须要安装的image,然后由报错的地址发现其无法正常拉取image。于是最终把解决的关键点放到了:手动指定image的地址上来。
推荐阅读
- JavaScript版数据结构与算法 轻松解决前端算法面试
- redis|SpringBoot+Redis 重复解决提交
- 面试系列|SpringBoot+Redis解决海量重复提交问题
- 隽智智能解决地下车库照明痛点
- 云之家连接Excel 365(快速解决审批数据无法自动汇总到表单的问题)
- 说说|说说 JSON 格式的弊端与解决方法
- 微信小程序|微信小程序使用Echarts真机调试报错,Echarts占内存过大解决方法
- vue.js|element组件 解决DateTimePicker + vue 弹出框只显示小时和“至”字处理
- 前端所遇问题栏|Uncaught Error: [vue-router] “path“ is required in a route configuration 的解决方案
- 后端实战与例子|解决(IDEA中报错 “Error running ‘Application‘: Command line is too long.“ 的解决办法)