You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Linux/CLI在Docker Hub创建私有仓库并实现Jenkins自动化推送

Jenkins自动化推送Docker镜像到Docker Hub私有仓库(自动创建仓库)

核心逻辑

Docker Hub支持推送镜像时自动创建私有仓库,只要镜像标签遵循[Docker Hub用户名]/[私有仓库名]:[标签]的格式,且你的账号有可用的私有仓库额度。无需提前手动创建仓库,推送操作会触发自动建库。

前置准备

  • Jenkins服务器已安装Docker及Docker插件(或Jenkins节点可直接调用Docker命令)
  • Docker Hub账号(确保有私有仓库配额)
  • 在Jenkins中配置Docker Hub凭证:
    • 类型选择「Username with password」
    • ID设为dockerhub-creds(后续流水线会引用)
    • 填入Docker Hub的用户名和密码

Jenkins流水线代码示例(Jenkinsfile)

pipeline {
    agent any
    environment {
        DOCKERHUB_USER = '你的Docker Hub用户名'
        REPO_NAME = '你的私有仓库名'
        IMAGE_TAG = "${BUILD_NUMBER}" // 用构建号作为标签,也可自定义
        FULL_IMAGE_NAME = "${DOCKERHUB_USER}/${REPO_NAME}:${IMAGE_TAG}"
    }
    stages {
        stage('拉取代码') {
            steps {
                git url: '你的代码仓库地址', branch: 'main'
            }
        }
        stage('构建Docker镜像') {
            steps {
                script {
                    docker.build(FULL_IMAGE_NAME)
                }
            }
        }
        stage('登录Docker Hub') {
            steps {
                script {
                    docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-creds') {
                        // 登录操作由Docker插件自动处理
                    }
                }
            }
        }
        stage('推送镜像(自动创建私有仓库)') {
            steps {
                script {
                    docker.image(FULL_IMAGE_NAME).push()
                    // 可选:推送latest标签
                    docker.image(FULL_IMAGE_NAME).push('latest')
                }
            }
        }
        stage('清理本地镜像') {
            steps {
                script {
                    sh "docker rmi ${FULL_IMAGE_NAME} || true"
                    sh "docker rmi ${DOCKERHUB_USER}/${REPO_NAME}:latest || true"
                }
            }
        }
    }
    post {
        always {
            // 确保登录状态清理
            sh "docker logout https://registry.hub.docker.com || true"
        }
    }
}

关键注意事项

  • 镜像标签格式:必须严格是[用户名]/[仓库名]:[标签],否则无法触发自动建库
  • 权限问题:确保Docker Hub账号有创建私有仓库的权限,若配额不足需升级账号
  • Docker守护进程访问:Jenkins节点需能正常调用Docker命令,若用Docker-in-Docker方案,要配置好宿主机Docker的挂载
  • 凭证安全:绝对不要在代码中硬编码Docker Hub的用户名和密码,必须用Jenkins凭证管理

替代方案(不用Docker插件)

如果不想用Jenkins Docker插件,也可以直接使用shell命令实现:

pipeline {
    agent any
    environment {
        DOCKERHUB_USER = credentials('dockerhub-creds').username
        DOCKERHUB_PWD = credentials('dockerhub-creds').password
        REPO_NAME = '你的私有仓库名'
        IMAGE_TAG = "${BUILD_NUMBER}"
        FULL_IMAGE_NAME = "${DOCKERHUB_USER}/${REPO_NAME}:${IMAGE_TAG}"
    }
    stages {
        stage('拉取代码') {
            steps {
                git url: '你的代码仓库地址', branch: 'main'
            }
        }
        stage('构建镜像') {
            steps {
                sh "docker build -t ${FULL_IMAGE_NAME} ."
            }
        }
        stage('登录并推送') {
            steps {
                sh "echo ${DOCKERHUB_PWD} | docker login -u ${DOCKERHUB_USER} --password-stdin"
                sh "docker push ${FULL_IMAGE_NAME}"
                sh "docker tag ${FULL_IMAGE_NAME} ${DOCKERHUB_USER}/${REPO_NAME}:latest"
                sh "docker push ${DOCKERHUB_USER}/${REPO_NAME}:latest"
            }
        }
        stage('清理') {
            steps {
                sh "docker rmi ${FULL_IMAGE_NAME} ${DOCKERHUB_USER}/${REPO_NAME}:latest || true"
                sh "docker logout || true"
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Sunny Shinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:07:33