www.icesr.com
IT运维工程师的摇篮

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

最近刚开始使用Docker,把常用的命令摸了一遍后,就想把镜像的build过程放到Jenkins上。具体过程就不说了,十分简单,只需要几条命令就可以了。

可以在向私有registry推送时却报出了异常:

<code>docker push registry.mydocker.com/demo/small:latest
The push refers <span class="hljs-keyword">to</span> repository [registry.mydocker.com/demo/small]
c4f96d93d165: Preparing
<span class="hljs-number">94</span>d1eb2ae195: Preparing
c53e037f4c89: Preparing
e15afa4858b6: Preparing
denied: requested access <span class="hljs-keyword">to</span> the resource <span class="hljs-keyword">is</span> denied
Build <span class="hljs-keyword">step</span> <span class="hljs-string">'Execute shell'</span> marked build <span class="hljs-keyword">as</span> failure
Finished: FAILURE</code>

原因是:在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内容:

<code>{
        "<span class="hljs-attribute">auths</span>": <span class="hljs-value">{
                "<span class="hljs-attribute">registry.mydocker.com</span>": <span class="hljs-value">{
                        "<span class="hljs-attribute">auth</span>": <span class="hljs-value"><span class="hljs-string">"s2ptYW5nAdE53SM6MXEydzNlNHApb2o="</span>
                </span>}
        </span>}
</span>}</code>

未经允许不得转载:冰点网络 » 解决Jenkins创建Docker Image后无法推送到私有Registry的问题

分享到:更多 ()

评论 抢沙发

评论前必须登录!