满足Docker轮毂牵引率限制

满足Docker轮毂牵引率限制,docker,jenkins,dockerhub,Docker,Jenkins,Dockerhub,去年Docker Hub决定不再提供无限的Docker镜像拉(请参阅)。这在理论上听起来有点合理,但在实践中,当你在一家拥有有限数量出口IP地址的大公司工作时,会引发一些问题 因此,我只是想:让我们按照建议的方式,使用用户帐户提供docker pull命令。即使有一个免费的帐户,也应该可以每六小时下载200张图片,这就足够了,并且可以通过付费帐户进行扩展 但这说起来容易做起来难。以下是简单的Jenkins管道: pipeline() { agent any stages {

去年Docker Hub决定不再提供无限的Docker镜像拉(请参阅)。这在理论上听起来有点合理,但在实践中,当你在一家拥有有限数量出口IP地址的大公司工作时,会引发一些问题

因此,我只是想:让我们按照建议的方式,使用用户帐户提供
docker pull
命令。即使有一个免费的帐户,也应该可以每六小时下载200张图片,这就足够了,并且可以通过付费帐户进行扩展

但这说起来容易做起来难。以下是简单的Jenkins管道:

pipeline() {
    agent any
    stages {
        stage('Docker Pull') {
            steps {
                withDockerRegistry([url: 'https://registry-1.docker.io', credentialsId: '<docker-hub-account>']) {
                    sh "docker pull maven:3.6.3-openjdk-14"
                }
            }
        }
    }
}
pipeline(){
任何代理人
舞台{
阶段(‘码头工人拉动’){
台阶{
withDockerRegistry([url:'https://registry-1.docker.io,凭证ID:“”){
sh“docker pull maven:3.6.3-openjdk-14”
}
}
}
}
}
尽管登录成功,但仍会在生成日志中导致以下错误:

[Pipeline] withDockerRegistry
Using the existing docker config file.$ docker login -u <user> -p ******** https://registry-1.docker.io
Login Succeeded
[Pipeline] {
[Pipeline] sh
+ docker pull docker.io/library/maven:3.6.3-openjdk-14
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
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline]与DockerRegistry
使用现有的docker配置文件。$docker login-u-p*****https://registry-1.docker.io
登录成功
[管道]{
[管道]上海
+docker-pull-docker.io/library/maven:3.6.3-openjdk-14
来自守护程序的错误响应:toomanyrequests:您已达到拉取速率限制。您可以通过验证和升级来增加限制:https://www.docker.com/increase-rate-limit
[管道]}
[Pipeline]//withDockerRegistry
[管道]}
那么,一个简单的问题:我做错了什么

只是澄清一下:错误首先发生在运行
sh“docker pull maven:3.6.3-openjdk-14”
时。这就是为什么我添加了
docker登录名
(Jenkins的
withDockerRegistry{…}
行)。我只是感到困惑,添加这一行并没有改变任何事情

PS:检查输出中所述的费率限制:
费率限制:200
剩余费率限制:198


PPS:关于如何使用Docker Hub的镜像来缓解这个问题,已经有上百万篇博客文章了。我喜欢使用官方方式,但我不确定这应该如何工作…

我相信您登录到了错误的注册表url。
~/.Docker/config.json
文件中Docker Hub的值为
https://index.docker.io/v1/
并且也是。您可以通过运行以下操作来检查该管道中的当前凭据:

pipeline() {
    agent any
    stages {
        stage('Docker Pull') {
            steps {
                withDockerRegistry([url: 'https://registry-1.docker.io', credentialsId: '<docker-hub-account>']) {
                    sh "cat ~/.docker/config.json"
                }
            }
        }
    }
}

这里有一个非技术性的答案

付钱。你滥用了一种资源,而这种资源本不应该免费提供给大公司。这些限制是为了让你付钱。或者,运行您自己的注册表


如果“大公司”(你的话)绕过这一限制,你会毁了我们其余的人。作为一个小项目的承包商,我每天都依赖Docker的免费注册。当我为大银行工作时,我会要求他们支付费用,就像其他任何有能力支付的人一样。

不太确定问题是什么:对我来说,这个错误表明你刚刚超过了匿名或免费用户的200次拉取限制。既然你提供了免费用户的凭据,为什么它的行为会有所不同呢?@FritzDuchardt不,我已经超过了匿名用户的100次拉取限制。这就是为什么我想用一个用户登录,以获得200次拉取的资格。我是唯一一个使用这个用户,正如你从PS上看到的,还有198次拉。但是登录似乎对
docker pull
命令没有任何影响,我想知道我是否需要执行
docker login
以外的其他操作。现在我明白了-谢谢你的解释谢谢你的回答!至少对调试有帮助。我将在周一试用,希望它能起作用。请注意:通过
-p
标志登录是不安全的。Docker建议改用
$cat~/my_password.txt | Docker login--username foo--password stdin
。我将用这个代替詹金斯DSL。遗憾的是,这并不能解决我的问题。即使使用
docker登录
~/.docker/config.json中的正确数据,最终也会达到拉取限制。我会给docker.withRegistry另一次尝试,但我并不完全希望它能起作用。如果你不能让Jenkins工作并想安装镜像,我有一个项目来实现自动化。这并不能回答为什么在Jenkins中传递的登录不起作用的问题。我确实为此付费(这样我就可以增加私有图像的限制,而不是增加下载量)、GitHub和我使用的其他资源,以及IntelliJ、windows 10 pro、Adobe creative cloud和Wolfram Alpha的商业许可证。我还捐赠了一些我经常使用的开源库。
pipeline() {
    agent any
    stages {
        stage('Docker Pull') {
            steps {
                withDockerRegistry([url: 'https://index.docker.io/v1/', credentialsId: '<docker-hub-account>']) {
                    sh "docker pull maven:3.6.3-openjdk-14"
                }
            }
        }
    }
}
pipeline() {
    agent any
    stages {
        stage('Docker Pull') {
            steps {
                sh "docker login -u $user -p $pass"
                sh "docker pull maven:3.6.3-openjdk-14"
            }
        }
    }
}