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

Jenkins Groovy流水线登录DockerHub失败问题求助

Jenkins流水线DockerHub登录问题解决

编写Jenkins流水线尝试登录DockerHub时遇到以下问题:

  • 首次使用-p ${变量名}方式登录,出现Docker daemon权限拒绝错误,同时日志提示建议使用--password-stdin进行安全登录
  • 改用--password-stdin方式并添加sudo后,又遇到sudo密码认证失败问题

注:系统已安装Docker。


首次尝试:-p参数登录失败

流水线代码

environment {     
    DOCKERHUB_CREDENTIALS= credentials('dockerhub-token') 
} 

steps {
    withCredentials([usernamePassword(credentialsId: 'dockerhub-token', passwordVariable: 'DOCKERHUB_CREDENTIALS_PSW', usernameVariable: 'DOCKERHUB_CREDENTIALS_USR')]) {
        sh 'docker login -u $DOCKERHUB_CREDENTIALS_USR -p ${DOCKERHUB_CREDENTIALS_PSW}'
        echo 'Login Completed'
    }
}

控制台错误输出

+ docker login -u username -p ****
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

错误说明:

警告:通过CLI使用--password参数不安全,请使用--password-stdin。
连接Docker守护进程套接字unix:///var/run/docker.sock时权限被拒绝:无法发起Post请求到http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth,连接unix套接字/var/run/docker.sock被拒绝


二次尝试:改用--password-stdin+sudo后的问题

流水线代码

environment {     
    DOCKERHUB_CREDENTIALS= credentials('dockerhub-token') 
} 

steps {
    sh 'echo $DOCKERHUB_CREDENTIALS_PSW | sudo -S docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin'
    echo 'Login Completed'
}

控制台错误输出

+ sudo -S docker login -u username --password-stdin
[sudo] password for jenkins: Sorry, try again.
[sudo] password for jenkins: 
sudo: no password was provided
sudo: 1 incorrect password attempt
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

错误说明:

[sudo] jenkins用户的密码:抱歉,请重试。
[sudo] jenkins用户的密码:
sudo:未提供密码
sudo:1次错误密码尝试


解决方案

1. 解决Docker权限问题(无需sudo执行Docker命令)

权限拒绝是因为Jenkins默认运行用户jenkins没有访问Docker套接字的权限,将该用户加入docker组即可:

# 将jenkins用户添加到docker组
sudo usermod -aG docker jenkins
# 重启Jenkins服务使配置生效
sudo systemctl restart jenkins

2. 正确使用--password-stdin的流水线代码

无需sudo,同时保留安全的--password-stdin方式,修正后的代码:

environment {
    DOCKERHUB_CREDENTIALS = credentials('dockerhub-token')
}

steps {
    withCredentials([usernamePassword(
        credentialsId: 'dockerhub-token',
        passwordVariable: 'DOCKERHUB_CREDENTIALS_PSW',
        usernameVariable: 'DOCKERHUB_CREDENTIALS_USR'
    )]) {
        sh "echo '${DOCKERHUB_CREDENTIALS_PSW}' | docker login -u '${DOCKERHUB_CREDENTIALS_USR}' --password-stdin"
        echo 'Login Completed'
    }
}

说明:用双引号包裹shell命令,确保Jenkins正确解析变量;用单引号包裹密码和用户名,避免特殊字符导致的解析异常。

备选:若必须使用sudo(不推荐)

如果因环境限制必须使用sudo,需配置jenkins用户免密执行Docker命令:

  1. 编辑sudoers文件:sudo visudo
  2. 添加以下配置行:
jenkins ALL=(ALL) NOPASSWD: /usr/bin/docker
  1. 保存退出后,重新运行流水线即可。

内容的提问来源于stack exchange,提问作者ajay singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:02:11