解决Jenkins创建Docker Image后无法推送到私有Registry的问题

最近刚开始使用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账户完成登录。那么如何解决呢?

  1. 使用root账户完成登录
  2. 将/root/目录下的.docker目录复制到/var/lib/jenkins
  3. 修改文件夹权限 chown -R jenkins.jenkins .docker

原理是:登录成功后会在.docker中生成一个config.json的文件,里面保存了认证的信息,以后每次执行docker pull/push时,都会通过检测该文件确定用户是否已完成认证。config.json内容:

{
        "auths": {
                "registry.mydocker.com": {
                        "auth": "s2ptYW5nAdE53SM6MXEydzNlNHApb2o="
                }
        }
}

猜您喜欢
评论已关闭。