在離線手動部署docker鏡像倉庫——harbor倉庫(一) 和離線手動部署docker鏡像倉庫——harbor倉庫(二)的實驗中,遇到一些harbor倉庫部署的問題,在此作個小結。
實驗環境:
harbor服務器系統:CentOS Linux release 7.4.1708 (Core)
harbor服務器IP:10.0.0.101(test101)
harbor版本:v1.5.0
docker版本:1.13.1
使用了另外一臺機器作pull和push鏡像測試:10.0.0.102(test102)nginx
在test101機器剛剛部署好harbor的時候,push鏡像失敗了,報「Get https://10.0.0.101/v1/_ping: dial tcp 10.0.0.101:443: getsockopt: connection refused」web
[root@test101 nginx]# docker push 10.0.0.101/test/bigdatacenter:latest The push refers to a repository [10.0.0.101/test/bigdatacenter] Get https://10.0.0.101/v1/_ping: dial tcp 10.0.0.101:443: getsockopt: connection refused [root@test101 nginx]#
是由於配置文件裏面配置的--insecure-registry=10.0.0.101這一行配置沒有生效(修改了配置以後,有重啓docker,可是這行內容也沒有加載成功):
docker
再次從新啓動了docker服務,使之從新加載配置文件json
[root@test101 harbor]# systemctl daemon-reload #重啓docker以前,先執行了這個步驟,很重要 [root@test101harbor]# systemctl restart docker
而後測試登陸harbor倉庫,就OK了:瀏覽器
[root@test101 harbor]# docker login 10.0.0.101 Username: admin Password: Login Succeeded
再push鏡像就成功了:服務器
[root@test101 harbor]# docker push 10.0.0.101/test/bigdatacenter:latest The push refers to a repository [10.0.0.101/test/bigdatacenter] df9d7f53cb5b: Pushed ab0926f7eb13: Pushed 24a30430d761: Pushed 20dd87a4c2ab: Layer already exists 78075328e0da: Layer already exists 9f8566ee5135: Layer already exists latest: digest: sha256:07c467b4f8c6cfa306484bd060721fb621ddb1fd43f528ef5a0df1157d8bd853 size: 1573 [root@test101 harbor]#
把harbor端口默認的80端口修改成1180,而後打了個測試鏡像上去,可是在test102機器pull鏡像的時候失敗了,報錯以下:tcp
[root@test102 ~]# docker pull 10.0.0.101/test/bigdatacenter:latest Trying to pull repository 10.0.0.101/test/bigdatacenter ... Get https://10.0.0.101/v1/_ping: dial tcp 10.0.0.101:443: getsockopt: connection refused
1)想起來test102機器上的docker的配置文件沒有修改,因而在 /etc/sysconfig/docker 加上了「--insecure-registry=10.0.0.101:1180」:
而後重啓了docker服務:ide
[root@test102 ~]# systemctl restart docker [root@test102 ~]#
再從新pull鏡像,發現報錯不同了:測試
[root@test102 ~]# docker pull 10.0.0.101/test/bigdatacenter:latest Trying to pull repository 10.0.0.101/test/bigdatacenter ... Pulling repository 10.0.0.101/test/bigdatacenter Error while pulling image: Get http://10.0.0.101/v1/repositories/test/bigdatacenter/images: dial tcp 10.0.0.101:80: getsockopt: connection refused
2)報錯dial tcp 10.0.0.101:80: getsockopt: connection refused,是由於鏡像名稱裏面沒有加上1180端口,就默認去80端口找鏡像了,因而在命令裏面加上了1180端口:ui
[root@test102 ~]# docker pull 10.0.0.101:1180/test/bigdatacenter:latest Trying to pull repository 10.0.0.101:1180/test/bigdatacenter ... Get https://10.0.0.101:1180/v1/_ping: http: server gave HTTP response to HTTPS client #關於這個報錯,網上有不少文章說是關於docker和harbor之間的交互存在一個http和https之間的問題,建議改/etc/docker/daemon.json 。可是按照網上的方法試了,改了/etc/docker/daemon.json 以後,docker服務起不來,無法解決。最後仍是嘗試使用systemctl daemon-reload+systemctl restart docker兩條命令解決了問題 [root@test102 ~]#
3)加上1180端口以後,報錯不同了,因而試着像上一個問題同樣,嘗試執行systemctl daemon-reload命令。從新載入 systemd,掃描新的或有變更的單元,而後再重啓docker:
[root@test102 ~]# systemctl daemon-reload [root@test102 ~]# systemctl restart docker
再pull鏡像,發現就成功了!
[root@test102 ~]# docker pull 10.0.0.101:1180/test/bigdatacenter:latest Trying to pull repository 10.0.0.101:1180/test/bigdatacenter ... latest: Pulling from 10.0.0.101:1180/test/bigdatacenter 53478ce18e19: Pull complete d1c225ed7c34: Pull complete c6724ba0c09a: Pull complete de3b8705ee9f: Pull complete c091a284f068: Pull complete 010503dbdd2d: Pull complete Digest: sha256:ce823873379c519a583756783923dd160473a60fcf78dfd869e8b33f5198f237 Status: Downloaded newer image for 10.0.0.101:1180/test/bigdatacenter:latest [root@test102 ~]#
注意,問題1和2說明,修改了docker的配置文件 /etc/sysconfig/docker以後,重啓docker服務,文件不必定生效了,若是發現沒生效,別忘了「systemctl daemon-reload」這條命令!
部署好harbor倉庫的時候,push鏡像失敗了,報denied: requested access to the resource is denied
[root@test101 harbor]# docker push 10.0.0.101:1180/test/bigdatacenter:latest The push refers to a repository [10.0.0.101:1180/test/bigdatacenter] d7393e4babfa: Preparing d8db36d925b6: Preparing 93fc2863a9fb: Preparing 20dd87a4c2ab: Preparing 78075328e0da: Preparing 9f8566ee5135: Waiting denied: requested access to the resource is denied
遇到這種狀況,登陸一下harbor倉庫,登陸成功,就OK了。
關於緣由和解決方法,在網上查了,說法不一,也有不少其餘的方法,可是沒有試過,就試着登陸了一下,而後問題就解決了,部署過程當中遇到好幾回這個問題,都是這樣解決的。當換了用戶名/密碼/端口/域名什麼的,在push鏡像的時候就可能會出現這個問題。
[root@test101 harbor]# docker login 10.0.0.101:1180 #登陸一下就行了 Username: admin Password: Login Succeeded
而後再從新push鏡像,就成功了
[root@test101 harbor]# docker push 10.0.0.101:1180/test/bigdatacenter:latest The push refers to a repository [10.0.0.101:1180/test/bigdatacenter] d7393e4babfa: Pushed d8db36d925b6: Pushed 93fc2863a9fb: Pushed 20dd87a4c2ab: Pushed 78075328e0da: Pushed 9f8566ee5135: Pushed latest: digest: sha256:63a86f231cf0415fe02ac11e31b00a959563ff3e264955c7c0236bd398b1c775 size: 1573 [root@test101 harbor]#
部署好harbor倉庫以後,發現瀏覽器訪問界面出不來,一直處於這樣的狀態:
後來發現由於這臺機器上只有360瀏覽器,存在模式的區別,如今用的是默認的兼容模式,因此界面出不來,並不是服務的問題。
把瀏覽器換成極速模式就行了:
爲了不這種沒必要要的問題,最好不要用360這樣的瀏覽器,最好使用谷歌瀏覽器
測試在rancher2.0上部署一個harbor倉庫的服務到服務器上,發現拉取鏡像失敗,報錯repository does not exist or may require ‘docker login’:
由於harbor倉庫的項目訪問級別設置成了私有,因此rancher-server和agent服務器都訪問不到,所以報錯沒法拉取鏡像。
由於在服務器上測試手動pull鏡像,是測試的公開項目裏面的鏡像,因此沒有發現該問題:
將harbor上面項目的訪問級別設置爲公開,就行了
在另外一次使用rancher2.0測試部署服務的時候,服務器上拉取了harbor倉庫的web鏡像,可是拉取鏡像一直失敗,報錯以下:
看到這個熟悉的錯誤信息,立刻查看docker配置文件,發現harbor的地址多寫了個http://
去掉配置文件的http:// 而後重啓docker服務便可:
而後重啓docker服務,從新部署,恢復正常: