解決Jenkins建立Docker Image後無法推送到私有Registry的問題
阿新 • • 發佈:2018-12-26
最近剛開始使用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="
}
}
}