Docker push-in Jenkins-拒绝:请求的资源访问被拒绝

Docker push-in Jenkins-拒绝:请求的资源访问被拒绝,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,所以我正试图在詹金斯建立一个管道来建立形象,并把他们推到Docker hub。 我在Manage‘Jenkins’中的凭据与“docker hub凭据”相同,似乎已被使用 它可以建立,但它只是无法通过推动。。。帮忙?我已经做了几个小时了,我不确定我错过了什么 我已经尝试使用docker登录,但jenkins不允许 stage('Build image') { /* This builds the actual image; synonymous to * docker buil

所以我正试图在詹金斯建立一个管道来建立形象,并把他们推到Docker hub。 我在Manage‘Jenkins’中的凭据与“docker hub凭据”相同,似乎已被使用

它可以建立,但它只是无法通过推动。。。帮忙?我已经做了几个小时了,我不确定我错过了什么

我已经尝试使用docker登录,但jenkins不允许

stage('Build image') {
    /* This builds the actual image; synonymous to
     * docker build on the command line */

     bat 'docker build -t username/foldername:build . '    }


stage('Push image') {
    /* Finally, we'll push the image with two tags:
    docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
        bat 'docker push username/foldername:build'
    }
}
我希望图像被推送,但我有这样一个:

The push refers to repository [docker.io/username/foldername]
a73d7d9f4346: Preparing
964bdfb24a54: Preparing
1af124d739c9: Preparing
6cffeea81e5d: Preparing
614a79865f6d: Preparing
612d27bb923f: Preparing
ef68f6734aa4: Preparing
612d27bb923f: Waiting
ef68f6734aa4: Waiting
denied: requested access to the resource is denied

图像推送
阶段,您可以先执行
docker登录
,然后推送图像。为docker登录尝试以下操作:

stage('Push image') {
    withCredentials([usernamePassword( credentialsId: 'docker-hub-credentials', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
        def registry_url = "registry.hub.docker.com/"
        bat "docker login -u $USER -p $PASSWORD ${registry_url}"
        docker.withRegistry("http://${registry_url}", "docker-hub-credentials") {
            // Push your image now
            bat "docker push username/foldername:build"
        }
    }
}
确保注册表url正确。
withCredentials([usernamePassword(…)])
上面的方法将设置两个环境变量
USER
PASSWORD
,这两个变量是来自凭证id的docker注册表凭证
docker hub credentials

,更好的选择是使用(它包含在推荐的插件中)

这样做,您必须在管道模型定义中指定docker注册表的凭据

Docker管道插件在将管道模型定义中指定的凭据应用于具有多分支管道的项目时遇到问题。也就是说,如果使用上述代码,您将继续收到错误:

拒绝:请求的对资源的访问被拒绝

然后,必须在Jenkins文件中指定凭据,如下所示:

node {

  checkout scm
  def dockerImage

  stage('Build image') {
    dockerImage = docker.build("username/repository:tag")
  }

  stage('Push image') {
    docker.withRegistry('https://registry-1.docker.io/v2/', 'docker-hub-credentials') {
      dockerImage.push()
    }
  }

}
如果需要,您可以将URL修改为自定义注册表

我找到了答案

 stage('Push image') {
        withDockerRegistry([ credentialsId: "docker-hub-credentials", url: "" ]) {
        bat "docker push devopsglobalmedia/teamcitydocker:build"
        }

我最近也遇到了同样的问题,docker注册表url错误

问题-
https://index.docker.io/v1

修复-
https://index.docker.io/v1/


是的,这是个问题。我无法将它推送到docker注册表。

我花了大约半天的时间来解决它。请确保安装了
Docker管道插件

script {
  withDockerRegistry([ credentialsId: "Docker-Hub-Cred", url: "https://index.docker.io/v1/" ]){            
                             
  }
}  

如果要推送专用存储库,则必须遵循以下命令:

第一:你必须确保dockerhub在jenkins上的凭证。 第二:你已经用管道项目创建了一个作业 第三:然后你必须用jenkinsfile来推进你的项目。 第四:现在你可以建造詹金斯了

我给完整的Jenkins文件,它将有助于解决这个拒绝许可的问题,并成功地创建docker图像和推到dockerhub

管道{
任何代理人
舞台{
阶段(“Maven安装”){
任何代理人
台阶{
bat'mvn-f pom.xml干净安装'
}
}
阶段(‘Docker构建’){
任何代理人
台阶{
bat“docker build-t docker Hub_用户名/存储库_名称/docker jenkins集成”
}
}
阶段('推送图像'){
任何代理人
台阶{
withDockerRegistry([CredentialId:“id”,url:]){
bat“docker tag docker Hub_用户名/存储库名称/docker jenkins集成docker Hub_用户名/存储库名称:docker jenkins集成”
bat“docker push dockerhub_用户名/存储库名称:docker jenkins集成”
}
}
}
}

}
今天,Docker pipeline插件为groovy提供了登录Docker hub、构建映像并最终推送映像的方法。 下面是声明性管道的示例代码

pipeline {
agent any
stages {
    stage('Push container') {
        steps {
            echo "Workspace is $WORKSPACE"
            dir("$WORKSPACE/dir-to-Dockerfile") {
                script {
                    def REGISTRY_URL = "https://index.docker.io/v1/"
                    def USER_NAME = "your-registry-username"
                    docker.withRegistry("$REGISTRY_URL", 'DockerHub-Cred-ID-Defined-In-Jenkins') {
                        def image = docker.build("$USER_NAME/some-image-name:${env.BUILD_ID}")
                        image.push()
                    }
                }
            }
        }
    }
}
}

您可能需要使用
docker login
我无法进行docker登录,它不是交互式的:/Try
docker login
在将运行此操作的计算机上?或者机器会不时改变吗?但这不是在给我的密码编码吗?不,你不是在硬编码密码。在Jenkins中创建名为“docker hub凭据”的用户名/密码凭据。如果已经完成了,那么我建议的代码应该可以工作。看看这个函数,使用了代码哦,那么你的意思是不用实际的凭证替换usernamevaluate:'USER',passwordVariable:'PASSWORD'?它们已经在凭据中,我的文件中没有。我担心的是:我不希望我的密码出现在日志中。您使用function
withCredentials
方法获得的任何凭据都不能以明文形式公开。即使您尝试在日志中打印它,它也只会打印星号(*******)。您好!谢谢你的回答。我用插件进行了“手动”构建,但我确实想要一个管道,所以我听从了你的建议。发生了两件事:它不接受dockerImage=docker.build,因为它说没有nohup(我使用的是Windows环境),所以我改为docker image=bat“docker build-t username/image:build”。其次,在阶段推送图像中,它不想与dockerImage一起工作,因为它似乎是空的。。。?但是这个形象是成功建立起来的。。。有什么主意吗?又来了!我尝试过docker.withRegistry(“”,'docker hub credentials'){bat“docker push DevpsGlobalMedia/teamcitydocker:build”,这次,它只告诉我“拒绝:请求的资源访问被拒绝”嗨!我认为dockerImage=bat'docker build…'不应该起作用。我在docker上运行Jenkins,我从来没有在Windows上运行过Jenkins,很抱歉我帮不了你。我希望你能找到解决方案。
pipeline {
agent any
stages {
    stage('Push container') {
        steps {
            echo "Workspace is $WORKSPACE"
            dir("$WORKSPACE/dir-to-Dockerfile") {
                script {
                    def REGISTRY_URL = "https://index.docker.io/v1/"
                    def USER_NAME = "your-registry-username"
                    docker.withRegistry("$REGISTRY_URL", 'DockerHub-Cred-ID-Defined-In-Jenkins') {
                        def image = docker.build("$USER_NAME/some-image-name:${env.BUILD_ID}")
                        image.push()
                    }
                }
            }
        }
    }
}
}