記在解決GitLab-CI下的Docker編譯推送問題後 原

問題描述

最近一直在測試GitLab下的Runner,並在其下實現CI,其中遇到Docker Image編譯後推送到Gitlab的容器中心失敗的問題.

在容器內執行完Docker鏡像的編譯後,自動推送到註冊中心時,報如下錯誤:

c2bf021f0c8d: Layer already exists
cd7100a72410: Layer already exists
dcf1253999b2: Pushed
a7e843cd55f6: Pushed
4fef4efdeb56: Pushed
unauthorized: authentication required
ERROR: Job failed: exit code 1

解決問題

問題排查

  • 最初因爲另一項目,有過成功的例子,所以一直將問題聚焦在Dockerfile上,可是後來本地編譯成功,並且推送成功。

  • 不得不講目標轉移到gitlab-ci.yml的內容上;一步步調試,編譯都沒問題,一直都是最後Push時出現問題。

  • 根據提示是unauthorized認證問題,部分資料顯示是前置行文的docker login有問題,在將cat ~/.docker/config.json文件打印調試後,發現問題也不在登陸上。

  • 接着排查,又有資料顯示是nginx轉發註冊中心端口時的問題,提到http和https的問題:指登陸時走https,而推送鏡像時走http。爲此,又將gitlab重新配置了一番,幸好我是採用docker-compose的方式搭建的,否則太麻煩了。

  • 爲了解決問題,我是換了各種關鍵詞,百度谷歌無所不用。最後終於找到靠譜的問題記錄,說是認證問題是由於授權Token失效的問題,因爲官方推薦在CI中使用環境變量的方式登錄,並推薦:"$CI_REGISTRY_USER" 和 "$CI_REGISTRY_PASSWORD"

問題解決

通過下面的操作路徑,將容器註冊中心的授權有效期改爲50即可

admin >> application_settings >> Container Registry

unauthorized: authentication required on docker push to a different repo

相關鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章