Gitlab管道失败:错误:准备失败:来自守护程序的错误响应:toomanyrequests

问题描述

我有Harbor个本地Docker注册表,所有必需的映像都已存在,并将GitLab连接到了Harbour,并且所有图像都是从Harbour接收的,但是11月2日之后,Docker限制了拉取次数,因此似乎服务是从Docker集线器中提取的。 是否可以使用dind服务从Harbour撤出?

管道输出

Running with gitlab-runner 12.10.1 (ce065b93)
  on docker_runner_7 WykGNjC6
Preparing the "docker" executor
30:20
Using Docker executor with image **harbor**.XXX.XXXX.net/library/docker_maven_jvm14 ...
Starting service docker:**dind** ...
**Pulling docker image docker:dind** ...
**ERROR**: Preparation Failed: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (docker.go:198:2s)
Will be retried in 3s ...
Using Docker executor with image harbor.XXX.XXX.net/library/docker_maven_jvm14 ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
ERROR: Preparation Failed: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (docker.go:198:4s)
Will be retried in 3s ...
Using Docker executor with image harbor.XXX.XXX.net/library/docker_maven_jvm14 ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
ERROR: Preparation Failed: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (docker.go:198:3s)
Will be retried in 3s ...
ERROR: Job Failed (system failure): Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (docker.go:198:3s)

解决方法

另一种方式: 如果您不想添加daemon.json,则可以执行以下操作:

  1. 从docker hub拉docker-dind

docker pull docker:stable-dind

  1. 登录到港口

docker login harbor.XXX.com

  1. 将图像标记为要隐藏

docker tag docker:stable-dind harbor.XXX.com/library/docker:stable-dind

  1. 推入港口

docker push harbor.XXX.com/library/docker:stable-dind

  1. 转到.gitlab-ci.yml

  2. 代替

services:
    - docker:dind

services:
    
    - name: harbor.XXX.com/library/docker:stable-dind
      alias: docker

我的.gitlab-ci.yml

stages:
  - build_and_push

Build:
  image: ${DOCKER_REGISTRY}/library/docker:ci_tools
  stage: build_and_push
  tags:
    - dind
  services:
    - name: ${DOCKER_REGISTRY}/library/docker:stable-dind
      alias: docker
  script:
    - docker login -u $DOCKER_REGISTRY_USERNAME -p $DOCKER_REGISTRY_PASSWORD $DOCKER_REGISTRY
    - make build test release REGISTRY=${DOCKER_REGISTRY}/library/ TELEGRAF_DOWNLOAD_URL="https://storage.XXX.com/ops/packages/telegraf-1.15.3_linux_amd64.tar.gz" TELEGRAF_SHA256="85a1ee372fb06921d09a345641bba5f3488d2db59a3fafa06f3f8c876523801d"

,

我找不到适用于Gitlab的解决方案,但是您可以告诉docker忽略docker hub注册表并转到本地注册表。

daemon.json中添加/etc/docker/daemon.json ,如果不存在,则只需添加路径即可。

daemon.json

{
  "registry-mirrors": ["https://harbor.XXX.com"]
}

sudo systemctl重新启动docker

,

我在将一些微服务部署到 kube 集群时也遇到了同样的问题,这是我写的一篇博客,提供了一种优化部署工作流程的解决方法:https://mailazy.com/blog/optimize-docker-pull-gitlab-pipelines/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...