1. 程式人生 > >解決Jenkins建立Docker Image後無法推送到私有Registry的問題

解決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="
                }
        }
}