最近刚开始使用Docker,把常用的命令摸了一遍后,就想把镜像的build过程放到Jenkins上。具体过程就不说了,十分简单,只需要几条命令就可以了。
可以在向私有registry推送时却报出了异常:
docker push registry.mydocker.com/demo/small:latest
The push refers to repository [registry.mydocker.com/demo/small]
c4f96d93d165: Preparing
94d1eb2ae195: Preparing
c53e037f4c89: Preparing
e15afa4858b6: Preparing
denied: requested access to the resource is denied
Build step 'Execute shell' marked build as failure
Finished: FAILURE
原因是:在push之前,需要使用docker login命令完成登录。
但是Jenkins Job的命令是以伪用户jenkins的名义执行的,因此无法直接在jenkins账户完成登录。那么如何解决呢?
- 使用root账户完成登录
- 将/root/目录下的.docker目录复制到/var/lib/jenkins
- 修改文件夹权限 chown -R jenkins.jenkins .docker
原理是:登录成功后会在.docker中生成一个config.json的文件,里面保存了认证的信息,以后每次执行docker pull/push时,都会通过检测该文件确定用户是否已完成认证。config.json内容:
{
"auths": {
"registry.mydocker.com": {
"auth": "s2ptYW5nAdE53SM6MXEydzNlNHApb2o="
}
}
}