GitLab Runner未使用Docker Registry Mirror触发镜像拉取速率超限,求排查配置问题
看起来你的配置里有个关键误解:GitLab Runner使用docker executor时,是通过挂载的/var/run/docker.sock调用宿主机的Docker daemon来拉取镜像的,而不是使用Runner容器内部的Docker配置。你挂载/etc/docker:/etc/docker:ro到Runner容器的操作其实不会影响宿主机Docker daemon的行为,这就是为什么你还是碰到了速率限制。
下面是具体的排查和修复步骤:
1. 确保宿主机Docker Daemon配置了镜像缓存
宿主机的/etc/docker/daemon.json必须正确指向你的pull-through registry,这样所有通过宿主机Docker拉取的镜像都会走缓存。示例配置:
{ "registry-mirrors": ["http://your-pull-through-registry:5000"] }
配置完成后,重启宿主机的Docker服务:
sudo systemctl restart docker
验证配置是否生效:
docker info | grep -A 5 "Registry Mirrors"
你应该能看到你的pull-through registry地址出现在输出中。
2. 测试宿主机拉取镜像是否走缓存
手动在宿主机上执行拉取命令,确认镜像通过你的缓存registry获取:
docker pull alpine:3.12
然后查看你的pull-through registry日志,应该能看到缓存该镜像的记录。如果日志里没有相关记录,说明registry的pull-through配置可能有问题,需要重新检查配置步骤是否正确。
3. 优化GitLab Runner配置(可选但推荐)
你看到的关于helper镜像的警告,说明Runner默认从Docker Hub拉取helper镜像,这也会消耗你的速率配额。可以修改Runner的config.toml,指定使用GitLab官方的镜像仓库(或者你缓存的helper镜像):
[[runners]] # ... 其他配置 ... [runners.docker] # ... 其他配置 ... helper_image = "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-7f7a4bb0"
这样Runner会从GitLab的仓库拉取helper镜像,避免占用Docker Hub的配额。
4. 移除不必要的挂载
你在Runner的config.toml和docker-compose.yml中挂载的/etc/docker:/etc/docker:ro是多余的,因为宿主机的Docker daemon配置已经独立生效,这个挂载不会改变宿主机的镜像拉取行为,可以移除。
完成以上步骤后,重新启动GitLab Runner,再触发构建任务,应该就不会再碰到速率超限的问题了。
内容的提问来源于stack exchange,提问作者Florian Weber

